DataGirdView

DataGridView知识点

  1. 简单示例

1)代码

 

SqlDataAdapter da;

 DataSet ds;

 string sql ="select 列名 from 表名"using(SqlConnection conn=new SqlConnection (DBHelper.connString))

{

da=new SqlDataAdapter(sql,conn);

ds=new DataSet();

da.fill(ds);

DataGridView1.DataSource=ds.Tables[0];

}

 

(2)代码解析

   上面用到了两个类,SqlDataAdapter DataSet

   DataSet对象可以看做是内存中的数据库,相当把数据库中需要的表、数据行、数据列和表之间的关系放到内存中。创建DataSet 后,可以独立出数据,不需要和数据库保持连接。程序可以从DataSet 中直接读取数据。ds.Tables[0]; 表示数据集中的第一张表。

  SqlDataAdapter 对象,是用于SQL Server数据库的数据适配器。使用适配器SqlDataAdapter 的步骤是:

1)创建数据库连接对象

SqlConnection conn=new SqlConnection (DBHelper.connString)

2)建立数据库查询语句

string sql ="select 列名 from 表名"

3)通过以上创建的sql语句和连接对象创建SqlDataAdapter对象

SqlDataAdapter da = new SqlDataAdapter(sql,conn);

4)调用SqlDataAdapter fill();方法向数据集填充数据。

DataSet ds=new DataSet();

da.fill(ds);

5)有了数据集以后,只需要设置DataGridView控件的DataSource属性。数据集的索引从0开始如果是访问第一张表用Tables[0]表示。

DataGridView1.DataSource=ds.Tables[0];

 

 

2.示例

 

namespace 药品信息管理系统
{
    public partial class frm_ClientTable : Form
    {
        public frm_ClientTable()
        {
            InitializeComponent();
            this.StartPosition = FormStartPosition.CenterScreen;  
        }

        private void frm_ClientTable_Load(object sender, EventArgs e)
        {

        }

        private void btn_Load_Click(object sender, EventArgs e)
        {
            using (SqlConnection sqlConnection = new SqlConnection(DBHelper.connString))
            {
                SqlCommand sqlCommand = new SqlCommand();
                                                                      //声明并实例化SQL命令;
                sqlCommand.Connection = sqlConnection;
                                                                       //将SQL命令的连接属性指向SQL连接;
                sqlCommand.CommandText = "SELECT * FROM tb_Client;";
                                                         //指定SQL命令的命令文本;该命令查询所有学生;
                SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();                                           //声明并实例化SQL数据适配器;
                sqlDataAdapter.SelectCommand = sqlCommand;                                                      //将SQL数据适配器的查询命令属性指向SQL命令;
                DataTable ClientTable = new DataTable();
                                                                     //声明并实例化数据表,用于保存所有学生,以用作数据网格视图的数据源;
                sqlConnection.Open();                                                                           //打开SQL连接;
                sqlDataAdapter.Fill(ClientTable);
                                                                           //SQL数据适配器读取数据,并填充学生数据表;
                sqlConnection.Close();                                                                          //关闭SQL连接;
                this.dgv_Client.Columns.Clear();                                                                 //数据网格视图的列集合清空;
                this.dgv_Client.DataSource = ClientTable;                                                       //将数据网格视图的数据源设为学生数据表;
                this.dgv_Client.Columns["CNo"].HeaderText = "客户编号";                                               //将数据网格视图的指定列的表头文本设为中文;
                this.dgv_Client.Columns["CName"].HeaderText = "客户名称";
                this.dgv_Client.Columns["CAddress"].HeaderText = "地址";
                this.dgv_Client.Columns["CTel"].HeaderText = "联系电话";
                this.dgv_Client.Columns["CName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
                this.dgv_Client.Columns[this.dgv_Client.Columns.Count - 1].AutoSizeMode =                         //数据网格视图的最后一列的自动调整列宽模式设为填充(至数据网格视图右侧边缘);
                    DataGridViewAutoSizeColumnMode.Fill;

            }
        }

        private void btn_Update_Click(object sender, EventArgs e)
        {
            using (SqlConnection sqlConnection = new SqlConnection(DBHelper.connString))
            {
                SqlCommand sqlCommand = new SqlCommand();                                                       //声明并实例化SQL命令;
                sqlCommand.Connection = sqlConnection;                                                          //将SQL命令的连接属性指向SQL连接;
                sqlCommand.CommandText =                                                                        //指定SQL命令的命令文本;
                    "UPDATE tb_Client"
                    + " SET CName=@CName,CAddress=@CAddress,CTel=@CTel"
                    + " WHERE CNo=@CNo;";





                sqlCommand.Parameters.Add("@CName", SqlDbType.VarChar, 0, "CName");                                  //向SQL命令的参数集合添加参数的名称、SQL Server数据类型、长度(仅用于定长类型)、所绑定的数据表中的列名;
                sqlCommand.Parameters.Add("@CAddress", SqlDbType.VarChar, 0, "CAddress");
                sqlCommand.Parameters.Add("@CTel", SqlDbType.VarChar, 0, "CTel");
                sqlCommand.Parameters.Add("@CNo", SqlDbType.Char, 10, "CNo");





                SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();                                           //声明并实例化SQL数据适配器,同时借助构造函数,将其SelectCommand属性设为先前创建的SQL命令;
                sqlDataAdapter.UpdateCommand = sqlCommand;                                                      //将SQL数据适配器的更新命令属性指向SQL命令;
                DataTable ClientTable = (DataTable)this.dgv_Client.DataSource;





                //声明数据表,并指向数据网格视图的数据源;数据源默认类型为object,还需强制转换类型;
                sqlConnection.Open();

                //打开SQL连接;
                int rowAffected = sqlDataAdapter.Update(ClientTable);
                sqlConnection.Close();
                if (rowAffected > 0)
                {
                    MessageBox.Show("更新" + rowAffected.ToString() + "行。");
                }
                else
                {
                    MessageBox.Show("not ok");
                }
                
                //SQL数据适配器根据学生数据表提交更新,并返回受影响行数;

            }
        }

        private void btn_Add_Click(object sender, EventArgs e)
        {
           
            //未完成
            using (SqlConnection sqlConnection = new SqlConnection(DBHelper.connString))
            {
                SqlCommand sqlCommand = new SqlCommand();                                                       //声明并实例化SQL命令;
                sqlCommand.Connection = sqlConnection;                                                          //将SQL命令的连接属性指向SQL连接;
                sqlCommand.CommandText =                                                                        //指定SQL命令的命令文本;
                   "insert tb_Client (CNo,CName,CTel,CAddress)values"
                    + "(@CNo,@CName,@CTel,@CAddress)";





                sqlCommand.Parameters.Add("@CName", SqlDbType.VarChar, 0, "CName");                                  //向SQL命令的参数集合添加参数的名称、SQL Server数据类型、长度(仅用于定长类型)、所绑定的数据表中的列名;
                sqlCommand.Parameters.Add("@CAddress", SqlDbType.VarChar, 0, "CAddress");
                sqlCommand.Parameters.Add("@CTel", SqlDbType.VarChar, 0, "CTel");
                sqlCommand.Parameters.Add("@CNo", SqlDbType.Char, 10, "CNo");





                SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();                                           //声明并实例化SQL数据适配器,同时借助构造函数,将其SelectCommand属性设为先前创建的SQL命令;
                sqlDataAdapter.UpdateCommand = sqlCommand;                                                      //将SQL数据适配器的更新命令属性指向SQL命令;
                DataTable ClientTable = (DataTable)this.dgv_Client.DataSource;





                //声明数据表,并指向数据网格视图的数据源;数据源默认类型为object,还需强制转换类型;
                sqlConnection.Open();


                //打开SQL连接;
                int i = sqlCommand.ExecuteNonQuery();
                if (i == 1)
                {
                    MessageBox.Show("OK");
                }
                else
                    MessageBox.Show("not OK");
                //int rowAffected = sqlDataAdapter.Update(ClientTable);
                sqlConnection.Close();
                MessageBox.Show("添加" + i.ToString() + "行。");
                //SQL数据适配器根据学生数据表提交更新,并返回受影响行数;

            }
        }

        private void btn_Delete_Click(object sender, EventArgs e)
        {
           
            
             
             
       

            //未完成
            using (SqlConnection sqlConnection = new SqlConnection(DBHelper.connString))
            {
                SqlCommand sqlCommand = new SqlCommand();                                                       //声明并实例化SQL命令;
                sqlCommand.Connection = sqlConnection;                                                          //将SQL命令的连接属性指向SQL连接;
                sqlCommand.CommandText =                                                                        //指定SQL命令的命令文本;
                    "delete from tb_Client"
                    + " WHERE CName='"+this.dgv_Client .CurrentRow .Cells [1].ToString ()+"'";;
                
                //sqlCommand.Parameters.Add("@CName", SqlDbType.VarChar, 0, "CName");                                  //向SQL命令的参数集合添加参数的名称、SQL Server数据类型、长度(仅用于定长类型)、所绑定的数据表中的列名;
                //sqlCommand.Parameters.Add("@CAddress", SqlDbType.VarChar, 0, "CAddress");
                //sqlCommand.Parameters.Add("@CTel", SqlDbType.VarChar, 0, "CTel");
                //sqlCommand.Parameters.Add("@CNo", SqlDbType.Char, 10, "CNo");





                SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();                                           //声明并实例化SQL数据适配器,同时借助构造函数,将其SelectCommand属性设为先前创建的SQL命令;
                sqlDataAdapter.UpdateCommand = sqlCommand;                                                      //将SQL数据适配器的更新命令属性指向SQL命令;
                DataTable ClientTable = (DataTable)this.dgv_Client.DataSource;





                //声明数据表,并指向数据网格视图的数据源;数据源默认类型为object,还需强制转换类型;
                sqlConnection.Open();

                //打开SQL连接;
                int i = sqlCommand.ExecuteNonQuery();
                if (i >0)
                {
                    MessageBox.Show("OK");
                }
                else
                    MessageBox.Show("not OK");
                //int rowAffected = sqlDataAdapter.Update(ClientTable);
                sqlConnection.Close();
                MessageBox.Show("删除" + i.ToString() + "行。");
                //SQL数据适配器根据学生数据表提交更新,并返回受影响行数;

            }
        }
    }
}