九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
gridview中如何定位?選中行的關(guān)鍵值

gridview中如何定位 選中行的關(guān)鍵值

 
asp.NET2.0中GridView恐怕是我們用得最多的一個(gè)數(shù)據(jù)列表控件了(與此相當(dāng)?shù)氖荝epeater)
下面從設(shè)置它的數(shù)據(jù)源到它的數(shù)據(jù)綁定,再到它的顯示設(shè)置來(lái)說(shuō)說(shuō)GridView的用法.(可以看出本文實(shí)在只是個(gè)總結(jié)貼,沒(méi)啥技術(shù)含量,歡迎大家補(bǔ)充說(shuō)明)

 

No.1 數(shù)據(jù)源:
    對(duì)于GridView來(lái)說(shuō),只要是序列化的數(shù)據(jù)都可以作為數(shù)據(jù)源.比如對(duì)象數(shù)組/XML/Table等等,只要你能想象到的,可以轉(zhuǎn)化成一張表的東西.
    如果圖省心的話,可以配合DataSource控件來(lái)使用它,那么對(duì)數(shù)據(jù)的操作就可以集中在DataSource中處理,雙劍合璧挖,省時(shí)又省心.
其綁定數(shù)據(jù)源的步驟就是:1.指定數(shù)據(jù)源:gridview.Datasource=xxx;2.綁定數(shù)據(jù)源:gridview.DataBind();

No.2 數(shù)據(jù)的綁定:
    GridView在我們綁定數(shù)據(jù)源之后會(huì)默認(rèn)自動(dòng)根據(jù)數(shù)據(jù)生成列,但是有時(shí)候,我們會(huì)手動(dòng)指定數(shù)據(jù)源而不用DataSource控件,并且需要更多樣化的數(shù)據(jù)綁定和控制,所以,使用模板列來(lái)綁定數(shù)據(jù),并對(duì)模版內(nèi)的控件定位就成了關(guān)鍵:(這里我把用GridView自帶列綁定數(shù)據(jù)省略掉了,如果有時(shí)間,我會(huì)把這里放在本文的最下面的附錄里)

    1.設(shè)置模板列
    在Design(設(shè)計(jì))模式下,GridView右上角有個(gè)小三角,點(diǎn)擊它就可以對(duì)GridView進(jìn)行更多操作,比如對(duì)列進(jìn)行編輯;如果添加了模板列的話,還可以在這里對(duì)模板列進(jìn)行編輯.

    在"顯示"這里,點(diǎn)擊下拉列表,選擇Item Template(這里是主要的顯示處,所放進(jìn)來(lái)的東西會(huì)在GridView的普通狀態(tài)下顯示),我們可以隨便往里面填什么(基本上所有可以顯示數(shù)據(jù)的控件都可以放進(jìn)來(lái)幫助我們綁定并顯示數(shù)據(jù)).
    比如我們拖進(jìn)來(lái)一個(gè)Label,然后點(diǎn)擊Label右上角的小三角就可以設(shè)置其的數(shù)據(jù)綁定了.
    如果用一個(gè)設(shè)置好的DataSource控件做數(shù)據(jù)源,那么就可以直接在里面選擇要綁定的字段及其顯示格式,系統(tǒng)幫我們自動(dòng)生成代碼;
    如果是自己指定數(shù)據(jù)源.....那么我們就只好自己來(lái)設(shè)置綁定了,可以在這里直接輸入("需要顯示的字段"),也可以切換到代碼,在里面寫.對(duì)于Label來(lái)說(shuō),可能的寫法是:<asp:Label ID="Label1" runat="server" Text='<%# ("id") %>'></asp:Label>.
    自己書寫<%# ("id") %>最大的好處就是:我們可以任意在里面填寫我們所需要的代碼!比如:<%# Convert.ToString(Convert.ToInt32( ("id") )+100)%>
    瞧,這意味著我們可以對(duì)該綁定的數(shù)據(jù)進(jìn)行一定的修飾,然后再顯示.如果該數(shù)據(jù)控件是一個(gè)類似GridView的可以幫定數(shù)據(jù)列的,那么我們甚至可以給它指定一個(gè)返回?cái)?shù)據(jù)源的函數(shù)!

    在"顯示"這里,點(diǎn)擊下拉列表,選擇EditItem Template(所放進(jìn)來(lái)的東西會(huì)在GridView的編輯狀態(tài)下顯示--即GridView.EditIndex等于該行時(shí)),我們需要往里面放我們希望在編輯該數(shù)據(jù)時(shí)要顯示的東西,比如一個(gè)TextBox(在這里,同樣可以給控件指定要綁定的數(shù)據(jù)). 
    代碼可能是這樣的:<asp:TextBox ID="TextBox1" runat="server" Text='<%# ("id") %>'></asp:TextBox>
    然后GridView里面的全部代碼可能是這樣的:
         <Columns>
                <asp:TemplateField>
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBox1" runat="server" Text='<%# ("id") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label1" runat="server" Text='<%# ("id") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:CommandField ShowEditButton="True" />
            </Columns>
    給GridView添加一個(gè)RowEditing事件:
    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
    {
        this.GridView1.EditIndex = e.NewEditIndex;
    }
    運(yùn)行一下,顯示正常,點(diǎn)擊Edit會(huì)發(fā)現(xiàn)顯示的數(shù)據(jù)被放進(jìn)了一個(gè)TexBox,這樣我們就可以對(duì)它進(jìn)行編輯了.

    2.在GridView的RowDataBound事件中,設(shè)置詳細(xì)的綁定數(shù)據(jù)
    在上面我們使用模板列來(lái)控制數(shù)據(jù)綁定以后基本上可以控制大部分?jǐn)?shù)據(jù)的詳細(xì)顯示了.但是可能有人覺得這樣寫不太好看(頁(yè)面和代碼根本沒(méi)分離嘛),或者我們?cè)贕ridView里使用了UserControl而帶來(lái)的綁定錯(cuò)誤(因?yàn)樵贕ridView給控件綁定數(shù)據(jù)時(shí),UserControl還沒(méi)有初始化)等原因,所以可以在這個(gè)事件里進(jìn)行詳細(xì)的綁定設(shè)置.
    從名字上就可以知道,該事件是GridView的一行被綁定后才觸發(fā)的.由于具體的行綁定涉及到行內(nèi)數(shù)據(jù)的定位,所以就放在下面來(lái)說(shuō)明如何使用RowDataBound,在這里,我們大概說(shuō)下它的過(guò)程:首驗(yàn)證傳回的e.Row是否被創(chuàng)建完全,然后從e.Row里用FindControl(ControlID)來(lái)獲取ID為ControlID的控件,最后給控件賦值即可.需要注意的是,如果用的是GridView自帶的列,則在RowDataBound中就是不同的方法來(lái)尋找了.
    由于數(shù)據(jù)的綁定完全在后臺(tái)代碼中實(shí)現(xiàn),我們可以更加自由地去修改和綁定數(shù)據(jù)了.

No.3 GriView中的控件/數(shù)據(jù)定位:
    在GridView中尋找一個(gè)數(shù)據(jù)并不是簡(jiǎn)簡(jiǎn)單單地一個(gè)this.GridView1.XXX那么簡(jiǎn)單,因?yàn)楫吘刮覀冊(cè)诤笈_(tái)寫代碼的時(shí)候,GridView里面的數(shù)據(jù)/數(shù)據(jù)模板還沒(méi)有生成吶.所以一般來(lái)說(shuō),我們采用的方法是先確定該數(shù)據(jù)/數(shù)據(jù)模板所在的行,然后根據(jù)其類型來(lái)從該行提取它(在這里我們就可以看到,這也是一個(gè)假定該行已經(jīng)被完全創(chuàng)建,且該行包含我們要找的數(shù)據(jù)/數(shù)據(jù)模板----因此使用的時(shí)候請(qǐng)首先確認(rèn)執(zhí)行該代碼前,代碼所需要的行已經(jīng)被創(chuàng)建).
    要獲取GridView自生成的列,可以用this.GridView1.Rows[index].Cells[index].Text;
    而模版列,則要用this.GridView1.Rows[index].Cells[index].FindControl(string ControlID)或者是this.GridView1.Rows[index].FindControl(string ControlID).
    檢查GridView的行是否被創(chuàng)建,可以用Row.RowType == DataControlRowType.DataRow(其中Row是我們要檢驗(yàn)的GridView行). 

    下面介紹常用的2種定位,各有各的優(yōu)缺點(diǎn),使用事件常常得到的是一個(gè)行,而使用Button控件的數(shù)據(jù)綁定則可以根據(jù)綁定的不同得到特定的數(shù)據(jù).
    1.使用GridView自帶事件進(jìn)行定位:
        下面我列出可能用到的事件(這里默認(rèn)控件名為GridView1)
    protected void GridView1_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
    {
        //用GridView的Select列時(shí),可以使用這個(gè)方法
        //e.NewSelectedIndex;//當(dāng)前要選擇的行,獲取的是GridView當(dāng)前頁(yè)的index
    }
    protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
    {
        //this.GridView1.SelectedValue.ToString();
        //當(dāng)前要選擇的行的DataKeys,獲取的是GridView當(dāng)前頁(yè)的DataKeys,
        //比如可以設(shè)置GridView的DataKeys是數(shù)據(jù)源里的"ID"那么這里獲取的就是當(dāng)前選中行的數(shù)據(jù)的ID.
        //需要注意的是,SelectedValue只有在SelectedIndexChanged中才有值,其他時(shí)候是null;
    }
    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        //e.RowIndex;//當(dāng)前要提交的行,獲取的是GridView當(dāng)前頁(yè)的index
    }
    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
    {
        //e.NewEditIndex;//當(dāng)前要編輯的行,獲取的是GridView當(dāng)前頁(yè)的index
    }
    protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        //e.RowIndex;//當(dāng)前要?jiǎng)h除的行,獲取的是GridView當(dāng)前頁(yè)的index
    }
    protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
    {
        //e.RowIndex;//當(dāng)前要撤消編輯的行,獲取的是GridView當(dāng)前頁(yè)的index
    }
    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        //e.NewPageIndex;//當(dāng)前要到的頁(yè),獲取的是GridView要切換頁(yè)的index
    }
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow && e.Row.RowIndex != GridView1.EditIndex)
        {
            //e.Row;//當(dāng)前已經(jīng)生成,并綁定好數(shù)據(jù)的行;
        }
    }
    2.使用Button中的CommandArgument屬性來(lái)綁定ID,進(jìn)而獲取要編輯、刪除、提交、選擇的行.
        比如可能的代碼是這樣的:<asp:Button ID="Button1" runat="server" CommandArgument='<%# ("id") %>' 
                         onclick="Button1_Click" Text="Button" />
        然后在Button1_Click這個(gè)事件中,我們就可以用((Button)sender).CommandArgument來(lái)獲得綁定的數(shù)據(jù)
    3.使用GridView.XXX來(lái)進(jìn)行定位.
        問(wèn)題回來(lái)了,現(xiàn)在我們要討論的是如何用GridView這種常用而又熟悉的方式來(lái)從GridView中獲取我們想要的數(shù)據(jù).
        在GridView中,可以存放2種數(shù)據(jù):一種可以顯示出來(lái)的,呈現(xiàn)給我們的是一個(gè)表格形式,那就是我們通常所使用GridView.Row或者Column來(lái)獲取到的;一種是不顯示的,但是我們可以在后臺(tái)使用,可以使用GridView.DataKeys來(lái)設(shè)置和獲取其值;
        不管是哪種數(shù)據(jù),只要不是GridView的屬性,就需要我們?cè)贕ridView完全生成以后才能獲取.
        1)數(shù)據(jù)表格
        就像前面所說(shuō),GridView僅僅將數(shù)據(jù)生成了一個(gè)表格,所以獲取的方式無(wú)非就是GridView.Row(GridView.Column主要用來(lái)設(shè)置整個(gè)列的屬性,所以一般不用來(lái)獲取里面的值),下面就是一個(gè)例子,我給每行的第2列中的btnAdd這個(gè)Button添加一個(gè)小屬性:
        foreach (GridViewRow gr in GridView)
        {
            ((Button)gr.Cells[1].FindControl("Button")).Attributes.Add("onclick", "alert('Clicked me!')");
        }
        2)DataKeys
        如果是DataKeys中的數(shù)據(jù),那么就可以直接使用GridView.DataKeys[編號(hào)或者綁定的Key的名稱]來(lái)獲取.比如我在開始的時(shí)候設(shè)置GridView.DataKeyNames="id";那么等到所有數(shù)據(jù)綁定完成后,就可以用GridView.DataKeys["id"]來(lái)獲取該行數(shù)據(jù)id的值了.

         如果gridview中的datakeynames只綁定了id,那么如果是用了gridview的自帶的選擇按鍵時(shí),就可以用this.GridView1.SelectedDataKey.Value;它和this.gridview1.selectvalue效果是一樣的,如果綁定了多個(gè)值,那么要想取選中行的某個(gè)關(guān)鍵值,就需用this.GridView1.SelectedDataKey.Values["id"].Tostring,而且 values[]中既可以放index序號(hào),又可以放字段名,因?yàn)榉抛侄蚊菀桌斫狻?/p>

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
DataKeyNames 屬性指定表示數(shù)據(jù)源主鍵的字段
c# – 如何使用rowdeleting事件刪除gridview中的行?
ASP.NET2.0中用Gridview控件操作數(shù)據(jù)
asp.net讀取GridView中某行或某單元格值
GridView獲取行所在的索引
如何在前臺(tái)的HTML標(biāo)記中獲取后臺(tái)的變量
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服