通过按一下按钮gridview的行迭代 [英] iterate through gridview rows on button click

查看:225
本文介绍了通过按一下按钮gridview的行迭代的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个GridView,用户可以选择一个复选框项目。当时我在页面底部的保存按钮,我想通过gridview的行进行迭代,并传递所选行链路ID。当我去,虽然重复,我gridview.rows将返回0,但有行有什么......我做错了?谢谢

 < ASP:的UpdatePanel ID =upPanResults=服务器>
        <&的ContentTemplate GT;
            < D​​IV ID =divResults的风格=最小高度:350像素;>
                < ASP:GridView控件ID =grdInvoice的ClientIDMode =静态=服务器的CssClass =DG
                    WIDTH =100%的DataKeyNames =链路ID的AutoGenerateColumns =FALSE网格=垂直
                    CELLPADDING =4AllowPaging =真AllowCustomPaging =真每页=1000PagerStyle可见光=假
                    ShowFooter =真正的RowStyle-的CssClass =项目AlternatingRowStyle-的CssClass =交流
                    HeaderStyle-的CssClass =HomeDGheadSelectedRowStyle-的CssClass =选择
                    OnRowDataBound =grdInvoice_RowDataBound>
                    <柱体和GT;
                        < ASP:的TemplateField的HeaderText =地址>
                            <&ItemTemplate中GT;
                                < ASP:标签ID =地址的CssClass =规范=服务器><%#DataBinder.Eval的(集装箱,DataItem.Address)%>< / ASP:标签>
                            < / ItemTemplate中>
                        < / ASP:的TemplateField>
                        < ASP:的TemplateField的HeaderText =日期>
                            <&ItemTemplate中GT;
                                < ASP:标签ID =日期的CssClass =规范=服务器><%#DataBinder.Eval的(集装箱,DataItem.Date)%>< / ASP:标签>
                            < / ItemTemplate中>
                        < / ASP:的TemplateField>
                        < ASP:的TemplateField的HeaderText =总计>
                            <&ItemTemplate中GT;
                                < ASP:标签=服务器ID =LblAmount的CssClass =NO_BORDER文本='<%#DataBinder.Eval的(集装箱,DataItem.Amount)%>'>< / ASP:标签>
                            < / ItemTemplate中>
                        < / ASP:的TemplateField>
                        < ASP:的TemplateField>
                            <&ItemTemplate中GT;
                                < ASP:复选框ID =ChkSelect=服务器/>
                            < / ItemTemplate中>
                        < / ASP:的TemplateField>
                    < /专栏>
                < / ASP:GridView的>
            < / DIV>
            <表格的宽度=98%>
                < TR HEIGHT =25>
                    < TD align =left>
                        < ASP:标签ID =Label1的=服务器的CssClass =HEAD2文本=批准文号的ClientIDMode =静态>< / ASP:标签>&安培; NBSP;&安培; NBSP;&LT ; ASP:文本框
                            ID =TXT=服务器的CssClass =规范的ClientIDMode =静态>< / ASP:文本框>
                    < / TD>
                    < TD ALIGN =右>
                        < ASP:标签ID =LABEL3=服务器的CssClass =HEAD2文本=选择的总计:>< / ASP:标签>
                        &安培; NBSP;&安培; NBSP;
                        < ASP:标签ID =LblTotal=服务器的ClientIDMode =静态的CssClass =HEAD2文本=0>< / ASP:标签>
                    < / TD>
                < / TR>
                < TR HEIGHT =25>
                    &所述; TD对齐=中心列跨度=2>
                        < ASP:按钮的ID =BtnSave=​​服务器的CssClass =BTN。
                            文本=保存的OnClick =BtnSave_Click/>
                        &安培; NBSP;&安培; NBSP;< ASP:按钮的ID =btnCancel=服务器的CssClass =BTN文本=取消
                            的OnClick =btnCancel_Click/>
                    < / TD>
                < / TR>
            < /表>
        < /&的ContentTemplate GT;
    < / ASP:的UpdatePanel>保护无效BtnSave_Click(对象发件人,EventArgs的发送)
        {
            upProgress.Visible = FALSE;
            字符串sLinks =;
            INT iLinks = 0;
            复选框CHK;
            的foreach(在grdInvoice.Rows GridViewRow行)
            {
                CHK =(复选框)row.Cells [3] .Controls [1];
                如果(chk.Checked ==真)
                {
                    sLinks + = grdInvoice.DataKeys [row.RowIndex] .Value.ToString()+,;
                    iLinks = iLinks + 1;
                }            }
}


解决方案

您可以通过行使用下面找到被选中的复选框的迭代:

 的foreach(在yourGrid.Rows GridViewRow行)
{
    复选框CHK = row.Cells [3] .Controls [1]作为复选框;
    如果((CHK = NULL)及!&安培; chk.Checked)
    {
        INT yourID = Convert.ToInt32(yourGrid.DataKeys [row.RowIndex] .value的);
        //做一些与这里的每一行...
    }
}

你确定你没有重新绑定在回发电网为空数据源之前,请保存按钮火灾?检查你的 pageLoad的事件。

我看你有多个的UpdatePanel 控制。尝试建立一个触发的UpdatePanel 包含 GridView控件链接到点击的UpdatePanel 的>与保存按钮。有些事情正在发生,其中服务器端不再知道被绑定到 GridView控件 GridView控件数据资料没有被回发到服务器。

I've got a gridview that the user can select items with a checkbox. At the bottom of the page I have a save button that I want to iterate through the gridview rows and pass the selected rows LinkID. When I go to iterate though, my gridview.rows is returning 0 but there are rows there...what am I doing wrong? Thanks

<asp:UpdatePanel ID="upPanResults" runat="server">
        <ContentTemplate>
            <div id="divResults" style="min-height: 350px;">
                <asp:GridView ID="grdInvoice" ClientIDMode="Static" runat="server" CssClass="DG"
                    Width="100%" DataKeyNames="LinkID" AutoGenerateColumns="False" GridLines="Vertical"
                    CellPadding="4" AllowPaging="True" AllowCustomPaging="True" PageSize="1000" PagerStyle-Visible="False"
                    ShowFooter="true" RowStyle-CssClass="Item" AlternatingRowStyle-CssClass="Alternating"
                    HeaderStyle-CssClass="HomeDGhead" SelectedRowStyle-CssClass="Selected"
                    OnRowDataBound="grdInvoice_RowDataBound">
                    <Columns>
                        <asp:TemplateField HeaderText="Address">
                            <ItemTemplate>
                                <asp:Label ID="Address" CssClass="norm" runat="server"><%# DataBinder.Eval(Container, "DataItem.Address") %></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Date">
                            <ItemTemplate>
                                <asp:Label ID="Date" CssClass="norm" runat="server"><%# DataBinder.Eval(Container, "DataItem.Date") %></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Total">
                            <ItemTemplate>
                                <asp:Label runat="server" ID="LblAmount" CssClass="no_border" Text='<%# DataBinder.Eval(Container, "DataItem.Amount") %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField>
                            <ItemTemplate>
                                <asp:CheckBox ID="ChkSelect" runat="server" />
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>
            </div>
            <table width="98%">
                <tr height="25">
                    <td align="left">
                        <asp:Label ID="Label1" runat="server" CssClass="head2" Text="Approval Number:" ClientIDMode="Static"></asp:Label>&nbsp;&nbsp;<asp:TextBox
                            ID="Txt" runat="server" CssClass="norm" ClientIDMode="Static"></asp:TextBox>
                    </td>
                    <td align="right">
                        <asp:Label ID="Label3" runat="server" CssClass="head2" Text="Selected Total:"></asp:Label>
                        &nbsp;&nbsp;
                        <asp:Label ID="LblTotal" runat="server" ClientIDMode="Static" CssClass="head2" Text="0"></asp:Label>
                    </td>
                </tr>
                <tr height="25">
                    <td align="center" colspan="2">
                        <asp:Button ID="BtnSave" runat="server" CssClass="btn" 
                            Text="Save" OnClick="BtnSave_Click" />
                        &nbsp;&nbsp;<asp:Button ID="btnCancel" runat="server" CssClass="btn" Text="Cancel"
                            OnClick="btnCancel_Click" />
                    </td>
                </tr>
            </table>
        </ContentTemplate>
    </asp:UpdatePanel>



protected void BtnSave_Click(object sender, EventArgs e)
        {
            upProgress.Visible = false;
            string sLinks = "";
            int iLinks = 0;
            CheckBox chk;
            foreach (GridViewRow row in grdInvoice.Rows)
            {
                chk = (CheckBox)row.Cells[3].Controls[1];
                if (chk.Checked == true)
                {
                    sLinks += grdInvoice.DataKeys[row.RowIndex].Value.ToString() + ",";
                    iLinks = iLinks + 1;
                }

            }
}

解决方案

You can iterate through the rows using the following to find the CheckBox's that were ticked:

foreach (GridViewRow row in yourGrid.Rows)
{
    CheckBox chk = row.Cells[3].Controls[1] as CheckBox;
    if ((chk != null) && chk.Checked)
    {
        int yourID = Convert.ToInt32(yourGrid.DataKeys[row.RowIndex].Value);
        // Do something with each row here...
    }
}

Are you sure your not rebinding the grid on postback to an empty DataSource before your save button fires? Check your PageLoad event.

I see you have multiple UpdatePanel controls. Try setting up a Trigger in the UpdatePanel that contains the GridView to link to the Click of the UpdatePanel with the save button. Something is going on where the server side no longer knows about the data that was bound to the GridView or the GridView data is not being posted back to the server.

这篇关于通过按一下按钮gridview的行迭代的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆