|
[Ctrl+A 全部选择 然后拷贝]
这段代码执行给定的SQL语句访问数据库,私有函数GetProductData返回一个包含数据记录的DataSet。下一步,让我们看如何编辑记录: 代码拷贝框 /// <summary> /// 这个函数只有当用户点击Edit按钮时才会被激活 /// </summary> /// <paramname="sender"></param> /// <paramname="E"></param> protected void MyDataGrid_Edit(Object sender, DataGridCommandEventArgs E) { ///找出被选定项目的索引(ItemIndex),并且进一步绑定数据 MyDataGrid.EditItemIndex = (int)E.Item.ItemIndex; BindGrid(); }
[Ctrl+A 全部选择 然后拷贝]通过上面代码所附带的注解大家也能明白MyDataGrid_Edit函数的功能:当用户点击Edit按钮时激活MyDataGrid_Edit函数,并且程序找到所要编辑的记录的索引,把该索引号分配给DataGrid的EditItemIndex属性。 如果用户点击Cancel按钮,将调用我们在上面的.aspx文件中提到的MyDataGrid_Cancel函数,程序如果分配给DataGrid属性 EditItemIndex的值为-1,就意味着用户没有选择Edit,程序如下: 代码拷贝框 /// <summary> /// 用户点击Cancel按钮时激活MyDataGrid函数 /// </summary> /// <paramname="sender"></param> /// <paramname="E"></param> protected void MyDataGrid_Cancel(Object sender, DataGridCommandEventArgs E) { MyDataGrid.EditItemIndex = -1; BindGrid(); }
[Ctrl+A 全部选择 然后拷贝]
下面的代码像我们展现了如何从DataGrid中删除一条选中的记录。我们知道Web控件DataGrid有一DataKeyField属性,事实上它就包含了每条记录的ProductID字段值。您一定会问如何通过DataKeyField属性得到DataGrid中选中记录的ProductID值呢?下面这段代码会让您释然的: 代码拷贝框 ----- int ProductID =(int)MyDataGrid.DataKeys[(int)E.Item.ItemIndex]; ----- MyDataGrid_Delete函数代码如下: /// <summary> ///从DataSet中删除一条记录 /// </summary> /// <param name="sender"></param> /// <param name="E"></param> protected void MyDataGrid_Delete(Object sender, DataGridCommandEventArgs E) { int ProductID =(int)MyDataGrid.DataKeys[(int)E.Item.ItemIndex]; string SQLStatement="Delete Products WHERE ProductID="+ProductID; string myConnectionString = "server=localhost;uid=sa;pwd=;database=NorthWind";
SqlConnection myConnection = new SqlConnection(myConnectionString); SqlCommand myCommand = new SqlCommand (SQLStatement,myConnection); myCommand.CommandTimeout = 15; myCommand.CommandType=CommandType.Text;
try { myConnection.Open(); myCommand.ExecuteNonQuery(); myConnection.Close(); } catch(Exception ee) { throw ee; } MyDataGrid.EditItemIndex = -1; BindGrid(); }
[Ctrl+A 全部选择 然后拷贝]
下面的代码用来更新NorthWind数据库的产品信息, 我们可以使用下面这项技术检索值: ------------------- bool Discon=((CheckBox)E.Item.FindControl("Discontinued")).Checked; ------------------- 这时我们使用FinControl()方法就能得到Discontinued CheckBox的值. 代码拷贝框 /// <summary> ///更新记录 /// </summary> /// <param name="sender"></param> /// <param name="E"></param> protected void MyDataGrid_Update(Object sender, DataGridCommandEventArgs E) { int ProductID =(int)MyDataGrid.DataKeys[(int)E.Item.ItemIndex]; string ProductName = ((TextBox)E.Item.Cells[3].Controls[0]).Text; string QuantityPerUnit=((TextBox)E.Item.Cells[4].Controls[0]).Text; string UnitPrice = ((TextBox)E.Item.Cells[5].Controls[0]).Text; Int16 UnitsInStock=Int16.Parse(((TextBox)E.Item.Cells[6].Controls[0]).Text); Int16 UnitsOnOrder=Int16.Parse(((TextBox)E.Item.Cells[7].Controls[0]).Text); Int16 ReorderLevel=Int16.Parse(((TextBox)E.Item.Cells[8].Controls[0]).Text); bool Discon=((CheckBox)E.Item.FindControl("Discontinued")).Checked; int result;
if(!Discon) { result=0; } else { result=1; } string SQLStatement="UPDATE Products "+ "SET ProductName='"+ProductName+"', "+ "QuantityPerUnit='"+QuantityPerUnit+"', "+ "UnitPrice ="+UnitPrice.Substring(UnitPrice.IndexOf("¥")+1)+", "+ "UnitsInStock ="+UnitsInStock+", "+ "UnitsOnOrder ="+UnitsOnOrder+", "+ "ReorderLevel ="+ReorderLevel+", "+ "Discontinued ="+result+ " WHERE ProductID ="+ProductID;
string myConnectionString = "server=localhost;uid=xjb;pwd=xjb;database=Northwind"; SqlConnection myConnection = new SqlConnection(myConnectionString); SqlCommand myCommand = new SqlCommand(SQLStatement,myConnection); myCommand.CommandTimeout = 15; myCommand.CommandType = CommandType.Text;
try { myConnection.Open(); myCommand.ExecuteNonQuery(); myConnection.Close(); } catch(Exception ee) { throw ee ; }
MyDataGrid.EditItemIndex = -1; BindGrid(); }
[Ctrl+A 全部选择 然后拷贝] 接下来的BindGrid()调用私有函数GetProductData取得DataSet对象并绑定到DataGrid控件。 /// <summary> /// 接受数据库数据并再次绑定 /// </summary> protected void BindGrid() { MyDataGrid.DataSource=GetProductData().Tables["Products"].DefaultView; MyDataGrid.DataBind(); } 用户在DataGrid中向前或向后移动时激活MyDataGrid_PageIndexChanged事件,因为DataGrid 不能自动的获取新页的索引号,所以我们只能手动取得索引号。 /// <summary> /// 分页操作 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void MyDataGrid_PageIndexChanged(object source, DataGridPageChangedEventArgs e) { MyDataGrid.CurrentPageIndex=e.NewPageIndex; BindGrid(); } 用户在任何时候想对数据分类时,就激活下面的Sort_Grid事件。例如,如果用户点击field headers,事件就将被激活,并且把数据分成我们想要的分类。 我们需要DataView对象去为e.SortExpression.ToString()方法分类,返回的是被点击域标题的分类。 /// <summary> /// 分类 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Sort_Grid(Object sender, DataGridSortCommandEventArgs e) { DataView dv= new DataView(GetProductData().Tables["Products"]); dv.Sort= e.SortExpression.ToString(); MyDataGrid.DataSource=dv; MyDataGrid.DataBind(); }
|