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

首頁(yè) > 開(kāi)發(fā) > 綜合 > 正文

datagrid編輯刪除分頁(yè)

2024-07-21 02:16:10
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

前臺(tái)

<%[email protected] page language="c#" codebehind="webform5.aspx.cs" autoeventwireup="false" inherits="csdn.webform5" %>
<!doctype html public "-//w3c//dtd html 4.0 transitional//en" >
<html>
    <head>
        <title>webform5</title>
        <meta content="microsoft visual studio .net 7.1" name="generator">
        <meta content="c#" name="code_language">
        <meta content="javascript" name="vs_defaultclientscript">
        <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetschema">
    </head>
    <body>
        <form id="form1" method="post" runat="server">
            <asp:textbox id="textbox1" runat="server" width="88px"></asp:textbox>
            <asp:textbox id="textbox2" runat="server" width="40px"></asp:textbox>
            <asp:button id="button1" runat="server" text="添加"></asp:button>
            <asp:datagrid id="datagrid1" runat="server" autogeneratecolumns="false" datakeyfield="id" allowpaging="true"
                pagesize="5" oneditcommand="edit" oncancelcommand="cancel" onupdatecommand="update">
                <columns>
                    <asp:templatecolumn headertext="姓名">
                        <itemtemplate>
                            <%...# databinder.eval(container.dataitem,"vname") %>
                        </itemtemplate>
                        <edititemtemplate>
                            <asp:textbox id="name" runat="server" text='<%# databinder.eval(container.dataitem,"vname") %>' width="88px">
                            </asp:textbox>
                        </edititemtemplate>
                    </asp:templatecolumn>
                    <asp:templatecolumn headertext="年齡">
                        <itemtemplate>
                            <%...# databinder.eval(container.dataitem,"iage") %>
                        </itemtemplate>
                        <edititemtemplate>
                            <asp:textbox id="age" runat="server" text='<%# databinder.eval(container.dataitem,"iage") %>' width="40px">
                            </asp:textbox>
                        </edititemtemplate>
                    </asp:templatecolumn>
                    <asp:editcommandcolumn updatetext="更新" canceltext="取消" edittext="編輯"></asp:editcommandcolumn>
                    <asp:buttoncolumn text="刪除" commandname="del"></asp:buttoncolumn>
                </columns>
                <pagerstyle mode="numericpages"></pagerstyle>
            </asp:datagrid></form>
    </body>
</html>

后臺(tái)

  using system;
using system.collections;
using system.componentmodel;
using system.data;
using system.data.sqlclient;
using system.drawing;
using system.web;
using system.web.sessionstate;
using system.web.ui;
using system.web.ui.webcontrols;
using system.web.ui.htmlcontrols; 
namespace csdn
...{
    /**//// <summary>
    /// webform5 的摘要說(shuō)明。
    /// </summary>
    public class webform5 : system.web.ui.page
    ...{
        protected system.web.ui.webcontrols.textbox textbox1;
        protected system.web.ui.webcontrols.textbox textbox2;
        protected system.web.ui.webcontrols.button button1;
        protected system.web.ui.webcontrols.datagrid datagrid1;
   
        private void page_load(object sender, system.eventargs e)
        ...{
            // 在此處放置用戶代碼以初始化頁(yè)面
            if(!ispostback)
            ...{
                setbind();
            }
        }
 
        protected void setbind()
        ...{
            sqlconnection conn=new sqlconnection(system.configuration.configurationsettings.appsettings["conn"]);
            sqldataadapter da=new sqldataadapter("select * from tb1",conn);
            dataset ds=new dataset();
            da.fill(ds,"table1");
            this.datagrid1.datasource=ds.tables["table1"];
            this.datagrid1.databind();
        }
 
        web 窗體設(shè)計(jì)器生成的代碼#region web 窗體設(shè)計(jì)器生成的代碼
        override protected void oninit(eventargs e)
        ...{
            //
            // codegen: 該調(diào)用是 asp.net web 窗體設(shè)計(jì)器所必需的。
            //
            initializecomponent();
            base.oninit(e);
        }
       
        /**//// <summary>
        /// 設(shè)計(jì)器支持所需的方法 - 不要使用代碼編輯器修改
        /// 此方法的內(nèi)容。
        /// </summary>
        private void initializecomponent()
        ...{   
            this.button1.click += new system.eventhandler(this.button1_click);
            this.datagrid1.itemcreated += new system.web.ui.webcontrols.datagriditemeventhandler(this.datagrid1_itemcreated);
            this.datagrid1.itemcommand += new system.web.ui.webcontrols.datagridcommandeventhandler(this.datagrid1_itemcommand);
            this.datagrid1.pageindexchanged += new system.web.ui.webcontrols.datagridpagechangedeventhandler(this.datagrid1_pageindexchanged);
            this.load += new system.eventhandler(this.page_load);
 
        }
        #endregion
 
        private void button1_click(object sender, system.eventargs e)
        ...{
            sqlconnection conn=new sqlconnection(system.configuration.configurationsettings.appsettings["conn"]);
            sqlcommand comm=new sqlcommand("insert into tb1 (vname,iage) values (@vname,@iage)",conn);
            sqlparameter parm1=new sqlparameter("@vname",sqldbtype.nvarchar,50);
            parm1.value=this.textbox1.text;
            sqlparameter parm2=new sqlparameter("@iage",sqldbtype.int);
            parm2.value=this.textbox2.text;
            comm.parameters.add(parm1);
            comm.parameters.add(parm2);
            conn.open();
            comm.executenonquery();
            conn.close();
            setbind();
        }
 
        private void datagrid1_itemcommand(object source, system.web.ui.webcontrols.datagridcommandeventargs e)
        ...{
            if(e.commandname=="del")
            ...{
                sqlconnection conn=new sqlconnection(system.configuration.configurationsettings.appsettings["conn"]);
                sqlcommand comm=new sqlcommand("delete from tb1 where [email protected]",conn);
                sqlparameter parm1=new sqlparameter("@id",sqldbtype.int);
                parm1.value=this.datagrid1.datakeys[e.item.itemindex];
                comm.parameters.add(parm1);
                conn.open();
                comm.executenonquery();
                conn.close();
                setbind();
            }
        }
 
        private void datagrid1_pageindexchanged(object source, system.web.ui.webcontrols.datagridpagechangedeventargs e)
        ...{
            this.datagrid1.currentpageindex=e.newpageindex;
            setbind();
        }
 
        protected void edit(object sender,datagridcommandeventargs e)
        ...{
            this.datagrid1.edititemindex=e.item.itemindex;
            setbind();
        }
 
        protected void cancel(object sender,datagridcommandeventargs e)
        ...{
            this.datagrid1.edititemindex=-1;
            setbind();
        }
 
        protected void update(object sender,datagridcommandeventargs e)
        ...{
            sqlconnection conn=new sqlconnection(system.configuration.configurationsettings.appsettings["conn"]);
            sqlcommand comm=new sqlcommand("update tb1 set [email protected],[email protected] where [email protected]",conn);
            sqlparameter parm1=new sqlparameter("@vname",sqldbtype.nvarchar,50);
            parm1.value=((textbox)e.item.findcontrol("name")).text;
            sqlparameter parm2=new sqlparameter("@iage",sqldbtype.int);
            parm2.value=((textbox)e.item.findcontrol("age")).text;
            sqlparameter parm3=new sqlparameter("@id",sqldbtype.int);
            parm3.value=this.datagrid1.datakeys[e.item.itemindex];
            comm.parameters.add(parm1);
            comm.parameters.add(parm2);
            comm.parameters.add(parm3);
            conn.open();
            comm.executenonquery();
            conn.close();
            this.datagrid1.edititemindex=-1;
            setbind();
        }
 
        private void datagrid1_itemcreated(object sender, system.web.ui.webcontrols.datagriditemeventargs e)
        ...{
            foreach(datagriditem di in this.datagrid1.items)
            ...{
                if(di.itemtype==listitemtype.item||di.itemtype==listitemtype.alternatingitem||di.itemtype==listitemtype.edititem)
                ...{
                    ((linkbutton)di.cells[3].controls[0]).attributes.add("onclick","return confirm('delete?');");
                }
            }
//一般不這么寫(xiě),看下面說(shuō)明第六點(diǎn)
        }
    }

(1)
大家可以看到setbind()中的一些代碼,并沒(méi)有顯式的打開(kāi)和關(guān)閉sqlconnection但是代碼確實(shí)是運(yùn)作的,原因在于sqldataadqpter的fill方法會(huì)自動(dòng)打開(kāi)或者關(guān)閉連接(當(dāng)然它會(huì)先檢測(cè)是不是連接已經(jīng)打開(kāi),如果已經(jīng)打開(kāi)的話不會(huì)重復(fù)打開(kāi)導(dǎo)致出錯(cuò))。
(2)
再看一下page_load()中
if(!ispostback)
{
 setbind();
}
很多初學(xué)者,不理解ispostback盲目的加或者不加這句話,其實(shí)加不加在于你的需求
ispostback為真的時(shí)候表示網(wǎng)頁(yè)不是第一次加載也就是回傳的情況
只有在!ispostback為真的時(shí)候用了setbind();也就是綁定datagrid的關(guān)鍵在于我們需要修改記錄,這往往是很多網(wǎng)友在修改記錄的時(shí)候發(fā)現(xiàn)向數(shù)據(jù)庫(kù)寫(xiě)入的數(shù)據(jù)還是原來(lái)的textbox中的內(nèi)容。為什么會(huì)這樣呢?在修改的時(shí)候我們先按下“編輯”這個(gè)按鈕執(zhí)行了protected void edit(object sender,datagridcommandeventargs e)里面的代碼,在修改了textbox中數(shù)據(jù)以后我們按下“更新”這個(gè)按鈕,這個(gè)時(shí)候也是一次postback如果沒(méi)有if(!ispostback)的話,其中的綁定代碼執(zhí)行了一次,也就是對(duì)模板列中的textbox進(jìn)行了重新賦值,然后轉(zhuǎn)到protected void update(object sender,datagridcommandeventargs e)中的代碼,你的代碼是執(zhí)行的,但是((textbox)e.item.findcontrol("name")).text已經(jīng)不是你修改的東西而是原來(lái)的東西了。
(3)
修改的代碼中parm3.value=this.datagrid1.datakeys[e.item.itemindex]
對(duì)于e.item.itemindex就是點(diǎn)擊的這個(gè)行(事件觸發(fā)的行)的行好,如果要用這個(gè)作為主鍵來(lái)放進(jìn)where子句update或者delete顯然是不合適的,比如你點(diǎn)擊的是第三行,數(shù)據(jù)庫(kù)內(nèi)這個(gè)記錄的主鍵卻是20或者是字符,因此我們需要為datagrid指定一個(gè)datakeyfield(前臺(tái)代碼中)告訴它,我的表的主鍵就是這個(gè)字段,在綁定了以后datagrid的datakeys就存儲(chǔ)數(shù)據(jù)了列表控件中每個(gè)記錄的主鍵,所以取的時(shí)候用索引this.datagrid1.datakeys[e.item.itemindex]來(lái)取就可以得到主鍵
(4)
看一下private void datagrid1_itemcreated(object sender, system.web.ui.webcontrols.datagriditemeventargs e)
中的一些代碼,首先itemcreated這個(gè)事件是在當(dāng)在datagrid控件中創(chuàng)建項(xiàng)時(shí)在服務(wù)器上發(fā)生,這個(gè)時(shí)候還沒(méi)有綁定數(shù)據(jù),所以如果在這個(gè)itemcreated中去取datagrid中的值你是得不到的。
foreach(datagriditem di in this.datagrid1.items)
{
if(di.itemtype==listitemtype.item||di.itemtype==listitemtype.alternatingitem||di.itemtype==listitemtype.edititem)
{
((linkbutton)di.cells[3].controls[0]).attributes.add("onclick","return confirm('delete?');");//這里的類(lèi)型轉(zhuǎn)換為linkbutton,在不指定buttoncolumn 的buttontype的時(shí)候默認(rèn)就是linkbutton,如果指定為pushbutton,這里類(lèi)型轉(zhuǎn)換應(yīng)該寫(xiě)button而不是linkbutton否則會(huì)出錯(cuò)
}
}
這段代碼為所有的刪除按鈕增加客戶端的click事件,在循環(huán)所有的datagrid1.items的時(shí)候我們注意到,僅僅需要在listitemtype.item和listitemtype.alternatingitem中的第四列(cells[3])中的第一個(gè)按鈕控件(controls[0])上添加屬性,因?yàn)樵赿atagrid的header或者footer中是找不到這個(gè)刪除按鈕的(雖然他們也是datagrid1.items)。設(shè)想一下如果不寫(xiě)di.itemtype==listitemtype.edititem會(huì)怎么樣?結(jié)果就是在編輯的時(shí)候按刪除那個(gè)時(shí)候是沒(méi)有提示的,因?yàn)闆](méi)有給編輯的行的按鈕加腳本。說(shuō)到這里想說(shuō)一下對(duì)這個(gè)程序的改進(jìn),大家或許不想在編輯的時(shí)候允許刪除操作(也就是點(diǎn)擊了編輯按鈕卻沒(méi)有點(diǎn)擊取消或者更新按鈕的時(shí)候是不運(yùn)行刪除操作),改進(jìn)方法很簡(jiǎn)單:把e.commandname=="del"這個(gè)判斷改為e.commandname=="del"&&e.item.itemtype!=listitemtype.edititem,就可以達(dá)到這個(gè)目的了。
還有之所以在這里沒(méi)有用((linkbutton)di.cells[3].findcontrol(刪除按鈕的id))來(lái)找到這個(gè)按鈕是因?yàn)檫@個(gè)按鈕如果不寫(xiě)是 <asp:buttoncolumn text="刪除" commandname="del"></asp:buttoncolumn>不能添加id的,如果這個(gè)按鈕是放在模板列中的,就可以有id了。
(5)
在編輯的時(shí)候this.datagrid1.edititemindex=e.item.itemindex在取消編輯的時(shí)候this.datagrid1.edititemindex=-1
當(dāng)edititemindex!=-1的時(shí)候,datagrid顯示的東西不再是itemtemplate中的東西而是edititemtemplate中的東西,所以在取消編輯的時(shí)候設(shè)定-1就可以了,同樣edititemindex和itemindex差不多是從0開(kāi)始編號(hào),表示的是編輯的這一行的索引號(hào)。
(6)
foreach(datagriditem di in this.datagrid1.items)
            {
                if(di.itemtype==listitemtype.item||di.itemtype==listitemtype.alternatingitem||di.itemtype==listitemtype.edititem)
                {
                    ((linkbutton)di.cells[3].controls[0]).attributes.add("onclick","return confirm('delete?');");
                }
            }
        }
這段代碼我為了演示如果不對(duì)itemtype進(jìn)行判斷會(huì)出錯(cuò),所以對(duì)datagrid1.items進(jìn)行了循環(huán)讀取(可以通過(guò)調(diào)試看到當(dāng)在設(shè)置了footer以后datagrid1.items.count>pagesize),一般情況下這么寫(xiě)就可以了
if(e.item.itemtype==listitemtype.item||e.item.itemtype==listitemtype.alternatingitem||e.item.itemtype==listitemtype.edititem)
    {
     ((linkbutton)e.item.cells[3].controls[0]).attributes.add("onclick","return confirm('delete?');");
    }

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 宿迁市| 灌南县| 南华县| 伊春市| 吴堡县| 海南省| 蓝田县| 大荔县| 越西县| 龙川县| 来宾市| 广东省| 高青县| 鱼台县| 信阳市| 东台市| 仪陇县| 张家口市| 外汇| 商丘市| 陕西省| 时尚| 茂名市| 板桥市| 芜湖县| 丰都县| 疏勒县| 盘锦市| 开封县| 栖霞市| 嘉祥县| 灌南县| 肥城市| 长丰县| 沈丘县| 深水埗区| 全州县| 兴隆县| 神农架林区| 绥阳县| 柏乡县|