1.增加一个自定义序号的列
有时,你需要为在DataGrid中显示每行的序号,如果使用Oracle数据库,你可以利用RowNum在Select命令中构造行序号,然后直接绑定到DataGrid,但是如果用的是SQL Server数据库,那么,该如何为Datagrid中增加行序号呢?
ADO.NET中通过DataColumn的3个属性来支持自动增量列:AutoIncrement,AutoIncrementSeed,AutoIncrementStep。只要将DataColumn的AutoIncrement设置为True即可以为DataTable的新行生成自动增量值。看个例子:
DataSet ds=new Dataset();
DataTable dt=ds.Tables.Add("Orders");
DataColumn col=dt.Columns.Add("OrderID",typeof(int));
col.AutoIncrement=true;
col.AutoIncrementSeed=-1;
col.AutoIncrementStep=-1;
col.ReadOnly=true;
上面OrderID列被设为自动增量,注意后面接下来两句,其值都被设为-1,其中有一定的原因。 AutoIncrementSeed和AutoIncrementStep控制着如何生成新值。当遇到空表时,ADO.NET 会将存储在AutoIncrementSeed中的值赋给第一行自动增量列,接着AutoIncrementStep生成后续的自动增量值。
原因:ADO.NET中生成的自动增量值仅仅是一个占位符,在数据库中会生成真正的新值,显示出来的仅仅是未提交给数据库的新行自动增量值,数据库可能会根据生成的值来生成不同的值。AutoIncrementSeed和AutoIncrementStep都设为-1,可以确保生成的占位符值不会出现在数据库。
所以在使用AutoIncrement的时候应将AutoIncrementSeed和AutoIncrementStep都设为-1。
2.在“编辑”状态下获取未显示的键值
<asp:datagrid id="DataGrid1" DataKeyField="id" ...>
加一个属性 DataKeyField="id" 其中id是数据库中的表的主键字段名
private void DataGrid1_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
string id = DataGrid1.DataKeys[e.Item.ItemIndex].ToString();
}
3.编辑按钮的相关代码
private void dgDemand_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)//编辑
{
dgDemand.EditItemIndex=e.Item.ItemIndex;
BindDataGrid();//重新绑定DataGrid,是自定义的方法
}
private void dgDemand_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)//更新
{
string note=((TextBox)e.Item.Cells[0].Controls[0]).Text.Trim();//获取修改后的值
string raiseTime=((TextBox)e.Item.Cells[1].Controls[0]).Text.Trim();
string remark=((TextBox)e.Item.Cells[2].Controls[0]).Text.Trim();
int demandID=Convert.ToInt32(dgDemand.DataKeys[e.Item.ItemIndex]);
string cmdText = "UPDATE T_OwnerDemand SET Note=" + note +",RaiseTime=" + raiseTime +",Remark="+remark +
"WHERE DemandID=" + demandID;
UpdateDataGrid(cmdText);//更新数据库
dgDemand.EditItemIndex = -1;
BindDataGrid(); //重新绑定DataGrid
}
private void dgDemand_CancelCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)//取消
{
dgDemand.EditItemIndex = -1;
BindDataGrid();
}
4.删除按钮的相关代码
private void dgDemand_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)//删除
{
int demandID=Convert.ToInt32(dgDemand.DataKeys[e.Item.ItemIndex]);
string cmdText = "DELETE FROM T_OwnerDmand WHERE DemandID=" + demandID;
UpdateDataGrid(cmdText);
BindDataGrid();
}
5.增加一行
在DataGrid外添加必要的控件,将需要增加的信息写入数据库,再重新绑定DataGrid。
6.分页