vb net中datagrid的使用.docx
《vb net中datagrid的使用.docx》由会员分享,可在线阅读,更多相关《vb net中datagrid的使用.docx(22页珍藏版)》请在冰点文库上搜索。
vbnet中datagrid的使用
VS.NET中的DataGrid
在.NET编程中,我们常常要通过控件DataGrid来显示数据库中的数据信息。
DataGrid按应用不同分为基于网页用的WEBformDataGrid和基于windows应用程序的WINformDataGrid。
一、winformDataGrid
利用DataGrid显示数据的过程如图1所示。
图1
首先通过ADO.NET去访问数据库,并在内存中生成一个数据表DataSet,然后再把这个DataSet通过属性DefaultView输出填充到DataGrid,显示在屏幕上。
现设有一个短信接收数据表,它里面有4个字段:
pid、shoujihaoma、neirong、jsshijian,用DataGrid显示此数据表的数据程序代码如下:
SqlConnectionmyConnection=newSqlConnection("server=liusw;UserID=sa;Password=sa;database=sms");
SqlDataAdapterda=newSqlDataAdapter("SELECT*FROMjs",myConnection);
DataSetds=newDataSet();
da.Fill(ds,"js");
dataGrid2.DataSource=ds.Tables["js"].DefaultView;
myConnection.Close();
这段代码运行的结果如图2所示:
图2
然而,很多时候我们不使用这种把整个数据表原装不动地全部显示的方式,而是根据自己的需要设计DataGrid。
例如,我们在显示的时候自定义表中的列名(字段名),选择性地显示我们所需要的数据。
为了对数据进行相关的操作,在DataGrid中还可以增加一些自定义列,如复选框列等。
为此在实际应用中,我们用得更多的是自定义DataGrid。
下面用一个例子加以说明。
还是上面的数据表,现在我们通过DataGrid来显示数据表的shoujihaoma、neirong、jsshijian这三个字段的数据,并增加一个复选框列,通过这一列来达到选择删除和提取电话号码的功能。
要自定义DataGrid首先要对DataGrid的一些基本知识有所了解,图3是winform下的DataGrid的基本结构:
图3
Datagrid是由行(row)与列(column)组成的,行与列的交互,组成一个个单元(cell)。
要自定义DataGrid就需要能控制每一个cell的变化,从而使row与column发生变化,最终形成Datagrid的变化。
Datagrid的默认结构,是把DatagridColumnStyle(列格式)设定为DatagridTextBoxColumn列的结构,即datagrid的列设为由textbox组成。
因此每一个cell都是一个textbox。
如果把某一列的DatagridColumnStyle设定为DatagridBoolColumn列结构,就可以在该列中添加checkbox控件,使cell的值为boolean类型(逻辑类型)的值。
对于DatagridTextBoxColumn我们也可以通过自定义列,加入combox(下拉框控件)。
HeaderText是列头名称。
图4是从数据库到产生DataGrid的整个过程:
图4
首先通过ADO.NET访问数据库,从而在内存中生成一个数据表DataSet,然后构建一个自定义DataGrid样式表,把这个样式表添加进DataGrid中,并同时把DataSet中的数据按样式表的格式填充到DataGrid中,这样就生成了一个DataGrid的视图,在屏幕中显示出来,以下是实现的源代码:
Voidjieshoushuju()
{
SqlConnectionmyConnection=newSqlConnection("server=liusw;UserID=sa;Password=sa;database=sms");
SqlDataAdapterda=newSqlDataAdapter("SELECT*FROMjs",myConnection);
DataSetds=newDataSet();
da.Fill(ds,"js");
intRo2=ds.Tables["js"].Rows.Count;//统计DataSet的总行数
//以上代码产生一个DataSet
DataColumnCheck=newDataColumn("xz");
Check.DataType=System.Type.GetType("System.Boolean");
Check.DefaultValue=false;//初始默认值
ds.Tables["js"].Columns.Add(Check);
//以上代码是构建(自定义)一个Boolean列并把该列添加到DataSet中,此列将在DataGrid中嵌入checkbox(复选框)控件。
DataColumncombobox=newDataColumn(“xzcz”);
combobox.DataType=System.Type.GetType("System.String");
combobox.DefaultValue="";
ds.Tables["js"].Columns.Add(combobox);
//以上代码是构建(自定义)一个TextBox列,并添加到DataSet中,此列将在DataGrid中嵌入combox(下拉框)控件。
到这里为止,我们已经构建了两个新列,并添加到DataSet中,此时DataSet中共有6个列,分别是pid、shoujihaoma、neirong、jsshijian、xz、xzcz,前四列是源数据表的字段,后两列是自定义添加上去的列。
下面的代码是构建一个DataGrid样式表。
DataGridTableStylets=newDataGridTableStyle();//定义一个DataGrid样式表
ts.MappingName=ds.Tables["js"].TableName;//样式表的数据由DataSet映射而来
ts.RowHeadersVisible=false;
DataGridTextBoxColumntc;
tc=newDataGridTextBoxColumn();//定义样式表的第一列
tc.HeaderText="编号";//列头名称
tc.MappingName=ds.Tables["js"].Columns[0].ColumnName;//列数据,这里的Columns[0]表示DataSet中的第一列数据,即这一列的数据由DataSet中的第一列数据映射而来。
ts.PreferredColumnWidth=0;//此列样式表的列宽,这里为0,表示隐藏此列
ts.PreferredRowHeight=30;//此列样式表的列高
ts.AlternatingBackColor=Color.LightGray;//使用隔行交替颜色
ts.GridColumnStyles.Add(tc);//把此列添加到样式表
tc=newDataGridTextBoxColumn();//定义样式表的第二列
tc.HeaderText="手机号码";
tc.MappingName=ds.Tables["js"].Columns[1].ColumnName;//DataSet映射列
ts.PreferredColumnWidth=80;
ts.PreferredRowHeight=30;
ts.AlternatingBackColor=Color.LightGray;
ts.AllowSorting=false;
ts.GridColumnStyles.Add(tc);
tc=newDataGridTextBoxColumn();//定义样式表的第三列
tc.HeaderText="短信内容";
tc.MappingName=ds.Tables["js"].Columns[2].ColumnName;//DataSet映射列
ts.PreferredColumnWidth=360;
ts.PreferredRowHeight=30;
ts.AlternatingBackColor=Color.LightGray;
ts.GridColumnStyles.Add(tc);
tc=newDataGridTextBoxColumn();//定义样式表的第四列
tc.HeaderText="发送时间";
tc.MappingName=ds.Tables["js"].Columns[3].ColumnName;//DataSet映射列
ts.PreferredColumnWidth=70;
ts.PreferredRowHeight=30;
ts.AlternatingBackColor=Color.LightGray;
ts.GridColumnStyles.Add(tc);
DataGridBoolColumndc=newDataGridBoolColumn();//定义样式表第五列,此列为BOOL列,是嵌入checkbox控件列。
dc.HeaderText="选择";
dc.MappingName=ds.Tables["js"].Columns[4].ColumnName;//自定义列
ts.PreferredColumnWidth=40;
ts.PreferredRowHeight=30;
ts.AlternatingBackColor=Color.LightGray;
ts.GridColumnStyles.Add(dc);
DataGridTextBoxColumncombo=newDataGridTextBoxColumn();//定义样式表第六列
ComboBoxcmbxo=newComboBox();//定义一个ComboBox控件
cmbxo.Items.AddRange(newobject[]{"显示","转发"});//给ComboBox控件增加两个选择量
cmbxo.Cursor=Cursors.Arrow;//获取鼠标位置
cmbxo.DropDownStyle=ComboBoxStyle.DropDownList;//点击鼠标后显示控件
cmbxo.Dock=DockStyle.Fill;//控件外观自适应调整
combo.TextBox.Controls.Add(cmbxo);//把定义好的ComboBox控件添加到此列
combo.HeaderText="选择操作";//列头名称
combo.MappingName=ds.Tables["js"].Columns[5].ColumnName;//自定义列
ts.PreferredColumnWidth=60;
ts.PreferredRowHeight=30;
ts.AlternatingBackColor=Color.LightGray;
ts.GridColumnStyles.Add(combo);//把此列添加到样式表
cmbxo.SelectionChangeCommitted+=newEventHandler(cmbxo_SelectionChangeCommitted);//ComboBox控件选择后所使用的方法
dataGrid2.TableStyles.Add(ts);//把设置好的dataGrid样式表添加到dataGrid中
dataGrid2.DataSource=ds.Tables["js"].DefaultView;//把DataSet的数据按照式样表的格式填充(映射)到dataGrid,并按照上面的构建生成表的视图显示出来。
myConnection.Close();
}
上面的代码运行后的效果如图5所示。
图5
这里特别讲一讲下拉框列的处理过程,在平常状况下,选择操作列中的cell还是以textbox的形式进行显示的,下拉框的出现是被鼠标点中的cell(落入焦点)才被激发的,而后,该cell就是一个实实在在的下拉框了,当鼠标离开该cell后,cell又恢复成一个textbox的模样了。
好了,DataGrid已经构建完成了,接下来是处理选中后的处理方法问题。
首先介绍复选框选中后的处理方法,这里以删除被复选框选中的记录为例。
思路:
用一个循环对DataGrid中的所有行的复选框进行检索,如果复选框为选中状态(状态值是true)则把该行的PID提取出来,并以此为判断条件执行删除操作,代码如下:
privatevoidbutton5_Click(objectsender,System.EventArgse)
{
int@pid;
for(inti=0;i{
if(Convert.ToBoolean(this.dataGrid2[i,4])==true)//如果复选框被选中
{
@pid=Convert.ToInt32(this.dataGrid2[i,0]);//提取所在行的PID值(此值在0列)
stringstrSQL="DELETEFROMjsWHEREpid="+@pid;
SqlConnectionA=newSqlConnection(Connection);
SqlCommandB=newSqlCommand(strSQL,A);
A.Open();
B.ExecuteNonQuery();//执行删除操作
A.Close();
}
}
this.dataGrid2.TableStyles.Clear();//清空DataGrid
jieshoushuju();//重新构建DataGrid
}
下面介绍下拉框选中后的操作,这里以选中下拉框的“显示”后,弹出一个对话框,在这个对话中显示接收到的短信内容为例。
思路:
首先获取下拉框所在行的行号,然后找到该行的短信内容列提取短信内容,通过对话框显示出来。
代码如下:
voidcmbxo_SelectionChangeCommitted(objectsender,System.EventArgse)
{
intdd1=this.dataGrid2.CurrentCell.RowNumber;//获取处于焦点下的下拉表所在的行
if(((ComboBox)sender).SelectedItem.ToString()=="显示")
{
MessageBox.Show(this.dataGrid2[dd1,2].ToString());//显示短信内容
}
}
二、webformDataGrid
.NET基于WEB的架构分为程序分为前台程序(ASPX页面程序)和后台程序(服务器端程序),所谓前台程序是一个显示界面程序,它运行于客户端,其显示的内容由后台程序提供。
后台程序运行于服务器,通常都是类文件,它负责接收客户端的请求及提交来的数据,运行后把运行结果送回到客户端的前台程序,通过前台程序显示出来。
所以DataGrid都是通过前台程序设置自定义模板列来构建的。
默认的DataGrid的格式如图6,下面是它的代码:
前台代码:
DataGridid="DataGrid1"runat="server"Font-Size="X-Small">
DataGrid>