如何在前端界面操作数据表

一、数据表的显示(通过DataGridView)

①实例化本窗体的数据表
②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的属性统一一致,否则会出现如下错误提示:
如何在前端界面操作数据表_第1张图片
另补充:出现上图错误的另一个常见原因是:未将数据表成功绑定为下拉框列的数据源。
⑥可以指定下拉框列在数据网格视图中的显示顺序
⑦下拉框列的自动调整列宽模式为填充
⑧将下拉框列加入数据网格视图的列集合

Column1.DisplayIndex = 4;
Column1.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
this.dataGridView1.Columns.Add(Column1);

四、通过数据表查询

1、查询结果为单行数据(主键查询)

①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;

【注意】:①查询结果返回的数据行,不能作为数据源,需另行创建数据表,并导入该数据行,最后将数据表作为数据源;

2、查询结果为多行数据(非主键查询)

其基本原理和步骤同理于单行数据的查询
区别在于:
①声明按名称排序的课程数据视图

 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”。

3、数据表Select查询

①声明并实例化查询返回的行集合
②利用数据表的自有方法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;    

【注意】该方法的效率最低。

如何在前端界面操作数据表_第2张图片

你可能感兴趣的:(C#&&SQL学习笔记)