在DataList控件中删除数据记录
(一)在DataList控件中刪除記錄的設計要點
在DataList控件中刪除數據記錄的設計相對簡單一點。該功能設計的重點在于當用戶單擊【刪除】按鈕時,程序如何判斷要刪除的是哪一行。使DataList控件具有刪除記錄功能的設計要點如下:
●????必須創建ItemTemplate普通項模板,在這個模板內加入一些控件顯示數據源的信息,讓數據管理者快速瀏覽記錄以確定需要刪除哪一條記錄。還需要加入一個“刪除”按鈕到這個模板中,以便能夠啟動刪除功能。
●?????將DataList控件的DataKeyField屬性設置到數據表的主鍵字段,以便讓程序知道刪除行的主鍵,正確地刪除對應行。
(二)實現在DataList控件中刪除記錄
在這個例子中,使用一個DataList控件,將數據庫MMIS的數據表employeeInfo的信息顯示在ItemTemplate普通項模板中,加入一個“刪除”按鈕到ItemTemplate中啟動刪除功能。
頁面的HTML標記
<form id="Form1" method="post" runat="server">
?????<asp:DataList id="DataList1" runat="server"??DataKeyField="編號">
?????????<HeaderTemplate>刪除員工記錄</HeaderTemplate>
?????????<ItemTemplate>
??????????????<asp:Button id="Button1" runat="server"
Text="刪除" CommandName="delete">
</asp:Button> 編號:
??????????????<asp:Label id=Label1 runat="server"
?Text='<%# DataBinder.Eval(Container.DataItem,"編號") %>'>
??????????????</asp:Label>姓名:
??????????????<asp:Label id=Label2 runat="server"
?Text='<%# DataBinder.Eval(Container.DataItem,"姓名") %>'>
??????????????</asp:Label>性別:
??????????????<asp:Label id=Label3 runat="server"
?Text='<%# DataBinder.Eval(Container.DataItem,"性別") %>'>
??????????????</asp:Label>部門:
??????????????<asp:Label id=Label4 runat="server"
?Text='<%# DataBinder.Eval(Container.DataItem,"部門") %>'>
??????????????</asp:Label>家庭住址:
??????????????<asp:Label id=Label5 runat="server"
?Text='<%# DataBinder.Eval(Container.DataItem,"家庭住址") %>'>
??????????????</asp:Label>
?????????</ItemTemplate>
?????</asp:DataList></FONT>
</form>
?后臺代碼
編寫自定義方法MyDataBind連接數據庫、填充所有行到數據集并綁定到控件DataList1上。
private void MyDataBind()
{
?????string?connectionString="workstation id=localhost;"+
?????????"initial catalog=MMIS;user id=sa; pwd=";
?????SqlConnection myConnection=new?SqlConnection(connectionString);
?????SqlCommand myCommand=myConnection.CreateCommand();
?????myCommand.CommandText="select * from employeeInfo";
?????SqlDataAdapter myDataAdapter=new?SqlDataAdapter();
?????myDataAdapter.SelectCommand=myCommand;
?????DataSet mySet=new?DataSet();
?????//填充數據集??????????
?????myDataAdapter.Fill(mySet,"employeeInfo");
?????//數據綁定到控件DataList1
?????DataList1.DataSource=mySet.Tables["employeeInfo"].DefaultView;
?????DataList1.DataBind();
}
網頁加載時綁定數據。
private?void?Page_Load(object?sender, System.EventArgs e)
{
?????if(!IsPostBack)
?????{
?????????//調用自定義函數綁定數據
?????????MyDataBind();
?????}
}
為“刪除”按鈕的單擊編寫程序代碼。因為它為子控件,其CommandName屬性為“delete”,所以程序代碼要寫在容器控件的反升事件DataList1_DeleteCommand中。
下段程序第一行是最關鍵的行,其作用是為了取得被單擊的“刪除”按鈕所在的行的主鍵字段,以便知道要刪除數據庫中的哪一行。在DataList控件的HTML標記中必須要有DataKeyField="主鍵字段"屬性才能使下段程序的第一行有效。本例DataList的標記是:
?<asp:DataList id="DataList1" runat="server"??DataKeyField="編號">
?
private?void?DataList1_DeleteCommand(object?source, System.Web.UI.WebControls.DataListCommandEventArgs e)
{
?????//取當前行(就是按下"刪除"按鈕的那一行)的主鍵文本
?????string?No=DataList1.DataKeys[e.Item.ItemIndex].ToString();
?????string?connectionString="workstation id=localhost;"+
?????????"initial catalog=MMIS;user id=sa; pwd=";
?????SqlConnection myConnection=new?SqlConnection(connectionString);
?????SqlCommand myCommand=myConnection.CreateCommand();
?????//構建刪除命令
?????myCommand.CommandText="delete from employeeInfo where 編號='"+No+"'";
?????myConnection.Open();
?????//執行刪除
?????myCommand.ExecuteNonQuery();
?????myConnection.Close();
?????MyDataBind();
}
為了慎重起見,在刪除記錄前需要詢問用戶,讓其確認是否真的需要刪除。使用“刪除”按鈕的Attributes.Add方法添加腳本可以做到這一點,但這段代碼不能寫在Page_Load中,因為“刪除”按鈕被加入到了DataList1控件中,成為了DataList1控件的一個子控件,在Page_Load中訪問不到這個按鈕控件。幸好,可以在DataList1控件的ItemCreated事件中實現這個要求,該事件在DataList1控件創建項時發生。
private?void?DataList1_ItemCreated(object?sender,
System.Web.UI.WebControls.DataListItemEventArgs e)
{
?????//判斷若是DataList1中的普通項、交替項或者編輯項
?????if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==
ListItemType.AlternatingItem||e.Item.ItemType==ListItemType.EditItem)
?????{
?????????//將子控件Button1轉換為ButtonDel
?????????Button ButtonDel=(Button)e.Item.FindControl("Button1");
?????????//為"刪除"按鈕添加屬性,以便單擊它時彈出確認框
?????????ButtonDel.Attributes.Add("onclick","return confirm('確實要刪除此行嗎?');");
?????}
}
程序運行結果如圖。
?
轉載于:https://www.cnblogs.com/dotnetfangjun/archive/2012/03/30/2425202.html
總結
以上是生活随笔為你收集整理的在DataList控件中删除数据记录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信小程序上传大于4m_微信定制小程序开
- 下一篇: c++ 每半个小时打印一次_有了3D打印