从DataList控件中删除一条记录
今天把DataList控件的一些用法从MSDN中学习了一点,第一感觉就是,原来对控件我还有好多东西要学。
在MSDN中有一个示例是说“如何:允许用户删除 DataList Web 服务器控件中的项”,其具体的地址为:ms-help://MS.MSDNQTR.v90.chs/dv_vwdcon/html/44c76175-34b4-4dec-95d7-f9f6fd1fe00d.htm
可以将这个地址直接在MSDN中输入,然后就得到了这个页面了。
好,下面言归正传。
删除DataList控件中的项就我目前知道的来说,有两种,第一种就是按照MSDN中所说的,利用数据源控件来做。具体如何我就不说了,MSDN中现成的。
第二种是利用SQL语句来做的。因为我认为,做项目不可能全用数据源控件,现在不是讲究分层开发么。
首先是我的页面
这个是我的DataList控件。里面有一个Label一个Button。
我在source中绑定了Label的数据字段:
- <asp:DataList ID="DataList" runat="server"
- onselectedindexchanged="DataList_SelectedIndexChanged" DataKeyField="ó?户§±ào?"
- ondeletecommand="DataList_DeleteCommand">
- <ItemTemplate>
- <asp:Label ID="Label_Item" runat="server"><%#Eval("ó?户§±ào?") %></asp:Label>
- <br />
- <asp:Button ID="Button_ItemDelete" runat="server" CommandName="delete"
- Text="é?3y′?ì?记?录?" Width="156px" />
- </ItemTemplate>
- </asp:DataList>
注意,由于我用的是VS2010,所以中文利用插件复制到这里的都是乱码,见谅。
然后是我给DataList控件绑定数据源的一个函数
乱码的地方为中文,请自行替换
- void bind()
- {
- string strConn = @"Data Source=CONGJUNFENG-PC\SQLEXPRESS;Initial Catalog=控?件têμ验é;Integrated Security=True;Pooling=False";
- string strCmd = "select * from ó?户§±í";
- SqlConnection conn = new SqlConnection(strConn);
- SqlCommand cmd;
- cmd = conn.CreateCommand();
- cmd.CommandText = strCmd;
- SqlDataAdapter da = new SqlDataAdapter(cmd);
- DataSet ds = new DataSet();
- conn.Open();
- da.Fill(ds,"ó?户§±í");
- DataList.DataSource = ds.Tables["ó?户§±í"].DefaultView;
- DataList.DataBind();
- DataList.DataKeyField = "ó?户§±ào?";
- Button b;
- b = (Button)DataList.FindControl("Button_ItemDelete");
- conn.Close();
- }
再然后呢,就是删除的事件了
乱码的地方为中文,请自行替换
- protected void DataList_DeleteCommand(object source, DataListCommandEventArgs e)
- {
- int id = (int)DataList.DataKeys[e.Item.ItemIndex]+1;
- string strConn = @"Data Source=CONGJUNFENG-PC\SQLEXPRESS;Initial Catalog=控?件têμ验é;Integrated Security=True;Pooling=False";
- SqlConnection conn = new SqlConnection(strConn);
- SqlCommand cmd;
- cmd = conn.CreateCommand();
- conn.Open();
- cmd.CommandText = "delete from ó?户§±í where ó?户§±ào?="+(id-1);
- cmd.ExecuteNonQuery();
- bind();
- conn.Close();
- }
在这里有一个小点,如果看了MSDN的话应该不会出错,而如果没有看的话,就很可能会出错,那就是将按钮的CommandName属性设置为delete,定义的是DataList的DeleteCommand事件。这是因为只有在单机按钮后,按钮传出一个delete事件引起DataList的DeleteCommand事件。这里我曾经尝试了在绑定数据源的函数中给按钮设置,但是出错了(囧~~),所以我也就没有再继续尝试了,直接就在按钮的属性面板里面改了。