分享
 
 
 

感受DataGrid给数据操作带来的便利(4)

王朝c#·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

第四节:编辑数据

不知道各位在asp程序中是怎样来修改数据库记录的,反正我的做法是做一个列表,将所有的记录列出来,然后,在关键字段加上超级链接,然后在用户点击超链接后,将页面转发到一个新的编辑页面上。在那个时候,我多么想想编辑Excel表格那样就在自己的列表里修改我想修改的字段。然后,DataGrid就为我提供了这样的功能。在DataGrid中,可以通过属性生成器在数据列表的前面增加一个“编辑”操作列,即在每一条记录的前面(每一行)都会增加一个“编辑”的超链接,单击这个超链接,这一行就会变成可以编辑的,每个字段都会变成一个文本框,这时,操作列就会变成“更新”和“取消”。这是,我们只需要修改我们需要修改的数据,然后,单击更新保存程序就行了(更新事件当然要写代码了)。

主要的步骤如下:

首先,启动属性生成器(不知道怎么启动,就看看我前面的文章),然后,选择左侧的“列”,在右边的“可用列”中,我们展开“按钮列”,然后,选择“编辑、更新、取消”,单击“〉”按钮将其加入“选定列”,这样,我们的DataGrid就会自动增加一列。

然后,回到属性窗口,增加三个事件,一个是单击“编辑”链接后产生的事件EditCommand,一个是更新数据的事件,UpdateCommand,一个是取消事件,CancleCommand。

在EditCommand中加入代码,告诉程序,选择的这一行需要编辑:

private void DataGrid1_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)

{

DataGrid1.EditItemIndex=(int)e.Item.ItemIndex;//告诉DataGrid第几行要编辑

BindGrid();//我在第一节写的函数,这里不重复了

}

完成了这段代码,你就会发现,它会乖乖地按照你的指令将你选择的这一行变成可编辑的。但是,当你单击“更新”、“取消”链接的时候,它并不理睬你。这是因为,我们还没有为这两个事件编写代码,我们先来写“取消”的代码:

private void DataGrid1_CancelCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)

{

DataGrid1.EditItemIndex=-1;//将-1传递给DataGrid的EditItemIndex属性,它就会回到只读状态

BindGrid();

}

简单的事情,做完了,我们在来做最负责的事情——更新数据:

//由于例子程序丢了,这里重新作了一个

private void DataGrid1_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)

{

String updateCmd = "UPDATE Authors SET au_id = @Id, au_lname = @LName, au_fname = @FName, phone = @Phone, "

+ "address = @Address, city = @City, state = @State, zip = @Zip, contract = @Contract where au_id = @Id";

//应该了解ADO.net中的参数化编程吧

SqlCommand myCommand = new SqlCommand(updateCmd, myConnection);

myCommand.Parameters.Add(new SqlParameter("@Id", SqlDbType.NVarChar, 11));

myCommand.Parameters.Add(new SqlParameter("@LName", SqlDbType.NVarChar, 40));

myCommand.Parameters.Add(new SqlParameter("@FName", SqlDbType.NVarChar, 20));

myCommand.Parameters.Add(new SqlParameter("@Phone", SqlDbType.NChar, 12));

myCommand.Parameters.Add(new SqlParameter("@Address", SqlDbType.NVarChar, 40));

myCommand.Parameters.Add(new SqlParameter("@City", SqlDbType.NVarChar, 20));

myCommand.Parameters.Add(new SqlParameter("@State", SqlDbType.NChar, 2));

myCommand.Parameters.Add(new SqlParameter("@Zip", SqlDbType.NChar, 5));

myCommand.Parameters.Add(new SqlParameter("@Contract", SqlDbType.NVarChar,1));

myCommand.Parameters["@Id"].Value = MyDataGrid.DataKeys[(int)e.Item.ItemIndex];

//这个地方忘了告诉大家,我们必须在DataGrid中设置DataKeyField属性,MyDataGrid.DataKeys[(int)e.Item.ItemIndex]才能取得想要的关键字

int numCols = e.Item.Cells.Count;

for (int i=2; i<numCols-1; i++) //skip first, second and last column

{

String colvalue =((System.Web.UI.WebControls.TextBox)e.Item.Cells[i].Controls[0]).Text;

//中间你最好加上输入验证,然后再执行下列语句赋值给参数。

myCommand.Parameters[cols[i-1]].Value = colvalue;

}

myCommand.Connection.Open();

try

{

//更新数据

myCommand.ExecuteNonQuery();

//恢复只读状态

MyDataGrid.EditItemIndex = -1;

}

catch (SqlException exc)

{

//出错处理

}

myCommand.Connection.Close();

BindGrid();//重新绑定数据,用的还是我原来写的那样的函数

}

好了,我们的工作做完了,这段代码看上去很长,其实,是因为它用了比较多的字段,所以要用比较多的参数,我把关键部分用红字标出来了。其实还是很简单的。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有