①实例化本窗体的数据表
②SQL数据适配器读取数据,并填数据表
③将数据网格视图的数据源设为已填充的数据表
④指定好数据源后,运行即可显示数据表
this.Table1 = new DataTable();
sqlDataAdapter.Fill(this.Table1);
this.dataGridView1.DataSource = Table1;
为保证每次显示数据网格视图后的数据都是最新的,可以在每次显示数据前将数据网格视图的列集合清空
this.dataGridView1.Columns.Clear();
【附加】:
可以将数据库中的列名,转换为方便前端操作人员理解的名称
this.dataGridView1.Columns["No"].HeaderText = "编号";
this.dataGridView1.Columns["Name"].HeaderText = "名称";
①指定SQL命令的命令文本,例如:
sqlCommand.CommandText = "UPDATE tb_Student"+ " SET Name=@Name,Gender=@Gender,BirthDate=@BirthDate,ClassNo=@ClassNo,Speciality=@Speciality"+ " WHERE No=@No;";
②向SQL命令的参数集合添加参数的名称、SQL Server数据类型、长度(仅用于定长类型)、所绑定的数据表中的列名;
sqlCommand.Parameters.Add("@Name",SqlDbType.VarChar,0,"Name");
sqlCommand.Parameters.Add("@Gender", SqlDbType.Bit, 0, "Gender");
③声明并实例化SQL数据适配器
④将其UpdateCommand属性设为先前创建的SQL命令
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
sqlDataAdapter.UpdateCommand = sqlCommand;
⑤声明数据表,并指向数据网格视图的数据源;
【注意】:数据源默认类型为object,需强制转换类型为数据表类型(DataTable),才能成功写入数据表;
DataTable studentTable = (DataTable)this.dataGridView1.DataSource;
为了给网格视图添加一列作为下拉框可选择的数据,通常可以将原数据源中的这一类事先隐藏
this.dataGridView1.Columns["buyer"].Visible = false;
①声明并实例化数据网格视图下拉框列
②指定事先填充好的数据表为该下拉框列的数据源
DataGridViewComboBoxColumn Column1 = new DataGridViewComboBoxColumn();
Column1.DataSource = buyerTable;
③设定下拉框列的名称与表头文本
Column1.Name = "name";
Column1.HeaderText = "指定采购员";
④设置下拉框列的显示成员与值成员
⑤设置下拉框列的数据属性名称为数据表的制定列
Column1.DisplayMember = "name";
Column1.ValueMember = "code";
Column1.DataPropertyName = "name";
【注意】:需将DisplayMember属性与DataPropertyName的属性统一一致,否则会出现如下错误提示:
另补充:出现上图错误的另一个常见原因是:未将数据表成功绑定为下拉框列的数据源。
⑥可以指定下拉框列在数据网格视图中的显示顺序
⑦下拉框列的自动调整列宽模式为填充
⑧将下拉框列加入数据网格视图的列集合
Column1.DisplayIndex = 4;
Column1.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
this.dataGridView1.Columns.Add(Column1);
①Find:数据表的【行集合】的方法Find,根据主键值快速查找,并返回其所在的数据行;
②Clone:数据表的方法Clone,创建相同架构的空表,用于保存搜索结果所在数据行;
③将(复制后的)数据行导入数据表
④将数据网格视图的数据源设为搜索结果数据表
DataRow searchResultRow = this.CourseTable.Rows.Find(this.txb_CourseNo.Text.Trim());
DataTable searchResultTable = this.CourseTable.Clone();
searchResultTable.ImportRow(searchResultRow);
this.dgv_Course.DataSource = searchResultTable;
【注意】:①查询结果返回的数据行,不能作为数据源,需另行创建数据表,并导入该数据行,最后将数据表作为数据源;
其基本原理和步骤同理于单行数据的查询
区别在于:
①声明按名称排序的课程数据视图
private DataView CourseViewByName;
②FindRows: 数据视图的方法FindRows,根据排序列快速查找,并返回数据行视图数组
③Foreach:遍历搜索结果所在数据行视图数组
DataRowView[] searchResultRowViews = this.CourseViewByName.FindRows(this.txb_CourseName.Text.Trim());
Foreach (DataRowView dataRowView1 in searchResultRowViews)
{
searchResultTable.ImportRow(dataRowView1.Row);
}
【注意】①dataRowView1仅为视图,若要返回原始数据,需要添加为“dataRowView1.Row”。
①声明并实例化查询返回的行集合
②利用数据表的自有方法Select进行查询
基本过程同理于多行查询
DataRow[] searchResultRows =this.CourseTable.Select("Pinyin LIKE '%" + this.txb_Pinyin.Text.Trim() + "%'");
DataTable searchResultTable = this.CourseTable.Clone();
foreach (DataRow row in searchResultRows)
{
searchResultTable.ImportRow(row);
}
this.dgv_Course.DataSource = searchResultTable;
【注意】该方法的效率最低。