国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

DataGrid學習五

2024-07-21 02:22:37
字體:
來源:轉載
供稿:網友
更新數據庫在 web 應用程序中可能經常很棘手。針對這種情況,datagrid 控件提供了一些使更新更容易的內置支持。為了允許對行進行編輯,datagrid 支持整型 edititemindex 屬性,該屬性指示網格的哪一行應該是可編輯的。設置了該屬性后,datagrid 按該索引將行呈現為文本輸入框,而不是簡單的標簽。值 -1(默認值)指示沒有行是可編輯的。頁可以在服務器端窗體中包含 datagrid,并通過 datagrid 的對象模型獲取對編輯數據的訪問。



  為了確定哪一行應該是可編輯的,需要一種方法接受用戶關于他們希望編輯哪一行的輸入。datagrid 可以包含一個 editcommandcolumn 來呈現激發三個特殊事件的鏈接:editcommand、updatecommand 和 cancelcommand。editcommandcolumn 以聲明方式添加到 datagrid 的 columns 集合,如下面的示例所示。
<asp:datagrid id="mydatagrid" runat="server"
  ...
  oneditcommand="mydatagrid_edit"
  oncancelcommand="mydatagrid_cancel"
  onupdatecommand="mydatagrid_update"
  datakeyfield="au_id"
>
  <columns>
    <asp:editcommandcolumn edittext="edit" canceltext="cancel" updatetext="update" />
  </columns>
</asp:datagrid>
  在 datagrid 標記本身上,將事件處理程序連到從 editcommandcolumn 激發的每個命令。這些處理程序的 datagridcommandeventargs 參數使您得以直接訪問由用來設置 datagrid 的 edititemindex 的客戶端選擇的索引。注意,需要重新綁定 datagrid 以使更改生效,如下面的示例所示。
public void mydatagrid_edit(object sender, datagridcommandeventargs e) {
    mydatagrid.edititemindex = (int)e.item.itemindex;
    bindgrid();
}
public sub mydatagrid_edit(sender as object, e as datagridcommandeventargs)
    mydatagrid.edititemindex = e.item.itemindex
    bindgrid()
end sub
public function mydatagrid_edit(sender:object, e:datagridcommandeventargs) : void {
    mydatagrid.edititemindex = int(e.item.itemindex);
    bindgrid();
}
  當編輯某行 datagrid 時,editcommandcolumn 呈現 update 和 cancel 鏈接。如果客戶端選擇 cancel,只需將 edititemindex 設置回 -1。但如果客戶端選擇 update,則需要對數據庫執行更新命令。執行更新查詢要求知道希望更新的行的數據庫中的主鍵。為支持此要求,datagrid 公開一個可以設置為主鍵字段名的 datakeyfield 屬性。在連到 updatecommand 的事件處理程序中,可以從 datagrid 的 datakeys 集合檢索鍵名。使用事件的 itemindex 在此集合中索引,如下面的示例所示。
mycommand.parameters["@id"].value = mydatagrid.datakeys[(int)e.item.itemindex];
mycommand.parameters("@id").value = mydatagrid.datakeys(ctype(e.item.itemindex, integer))
mycommand.parameters["@id"].value = mydatagrid.datakeys[int(e.item.itemindex)];
在 update 事件處理程序的最后,將 edititemindex 設置回 -1。下面的示例說明此代碼的運行。



<%@ import namespace="system.data" %>
<%@ import namespace="system.data.sqlclient" %>
<html>
<script language="c#" runat="server">



    sqlconnection myconnection;



    protected void page_load(object src, eventargs e)
    {
        myconnection=new sqlconnection("server=jeff;uid=sa;password=;database=pubs");
        if (!ispostback)
            bindgrid();
    }



    public void mydatagrid_edit(object sender, datagridcommandeventargs e)
    {
        mydatagrid.edititemindex = (int)e.item.itemindex;
        bindgrid();
    }



    public void mydatagrid_cancel(object sender, datagridcommandeventargs e)
    {
        mydatagrid.edititemindex = -1;
        bindgrid();
    }



    public void mydatagrid_update(object sender, datagridcommandeventargs e)
    {
        string updatecmd = "update authors set au_lname = @lname, au_fname = @fname, phone = @phone, "
             + "address = @address, city = @city, state = @state, zip = @zip, contract = @contract where au_id = @id";



        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];



        string[] cols = {"@id","@lname","@fname","@phone","@address","@city","@state","@zip","@contract"};



        int numcols = e.item.cells.count;
        for (int i=2; i<numcols-1; i++) //跳過第一、第二和最后一列
        {
            string colvalue =((textbox)e.item.cells[i].controls[0]).text;



            // 檢查在所需字段中是否有空值
            if (i<6 && colvalue == "")
            {
                message.innerhtml = "錯誤:“作者 id”、“姓名”或“電話”不允許使用空值";
                message.style["color"] = "red";
                return;
            }



            mycommand.parameters[cols[i-1]].value = colvalue;
        }



        //追加最后一行,將 true/false 值轉換為 0/1
        if (string.compare(((textbox)e.item.cells[numcols-1].controls[0]).text, "true", true)==0)
                    mycommand.parameters["@contract"].value =  "1";
        else
                    mycommand.parameters["@contract"].value =  "0";



        mycommand.connection.open();



        try
        {
            mycommand.executenonquery();
            message.innerhtml = "<b>已更新記錄</b><br>" + updatecmd;
            mydatagrid.edititemindex = -1;
        }
        catch (sqlexception exc)
        {
            if (exc.number == 2627)
                message.innerhtml = "錯誤:已存在具有相同主鍵的記錄";
            else
                message.innerhtml = "錯誤:未能更新記錄,請確保正確填寫了字段";
            message.style["color"] = "red";
        }



        mycommand.connection.close();



        bindgrid();
    }



    public void bindgrid()
    {
        sqldataadapter mycommand = new sqldataadapter("select * from authors", myconnection);



        dataset ds = new dataset();
        mycommand.fill(ds, "authors");



        mydatagrid.datasource=ds.tables["authors"].defaultview;
        mydatagrid.databind();
    }



</script>
<body >
  <form runat="server" id="form1">
   <h3><font face="宋體">更新數據行</font></h3>
   <span id="message" enableviewstate="false" runat="server" /><p>
   <asp:datagrid id="mydatagrid" runat="server" width="800" backcolor="#ccccff" bordercolor="black" showfooter="false" cellpadding="3" cellspacing="0" font-name="verdana" font-size="8pt" headerstyle-backcolor="#aaaadd" oneditcommand="mydatagrid_edit" oncancelcommand="mydatagrid_cancel" onupdatecommand="mydatagrid_update" datakeyfield="au_id">
   <columns>
    <asp:editcommandcolumn edittext="編輯" canceltext="取消" updatetext="更新" itemstyle-wrap="false" />
   </columns>
   </asp:datagrid>
  </form>
</body>
</html>

收集最實用的網頁特效代碼!

上一篇:DataGrid學習六

下一篇:DataGrid學習四

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 蒙城县| 五指山市| 钟山县| 报价| 新乐市| 宜良县| 民权县| 观塘区| 民丰县| 全南县| 淮阳县| 吉隆县| 安岳县| 奉化市| 太仓市| 白山市| 博客| 永平县| 芦山县| 宁武县| 扶风县| 阳东县| 镶黄旗| 宜州市| 古浪县| 辽阳县| 新兴县| 子长县| 浦江县| 靖宇县| 通河县| 鹤峰县| 桂林市| 巴里| 唐山市| 吕梁市| 喀什市| 抚松县| 乃东县| 扶风县| 房山区|