Получение значения rowID для «проверенного» флажка в GridView в ASP.Net - PullRequest
3 голосов
/ 11 июня 2010

Я использую флажки в GridView. Мне нужно определить значение в ячейке во 2-м столбце, если флажок установлен.

Я использую C # 2008 и ASP.net

                    <asp:GridView ID="gvOrders" runat="server" AutoGenerateColumns="False" CellPadding="4" GridLines="None" Width="100%" AllowPaging="True" PageSize="20" 
                    onpageindexchanging="gvOrders_PageIndexChanging" ForeColor="#333333">
                    <Columns>
                        <asp:TemplateField HeaderText="VerifiedComplete" >
                            <ItemTemplate>
                                <asp:CheckBox ID="cbPOID" runat="server"/>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:BoundField DataField="PurchaseOrderID" HeaderText="PurchaseOrderID" HtmlEncode="False" ></asp:BoundField>
                        <asp:BoundField DataField="VENDOR_ID" HeaderText="Vendor ID"></asp:BoundField>
                        <asp:BoundField DataField="VENDOR_NAME" HeaderText="Vendor Name"></asp:BoundField>
                        <asp:BoundField DataField="ITEM_DESC" HeaderText="Item Desc"></asp:BoundField>
                        <asp:BoundField DataField="SYS_DATE" HeaderText="System Date"></asp:BoundField>
                    </Columns>
                    <FooterStyle CssClass="GridFooter" BackColor="#990000" Font-Bold="True" ForeColor="White" />
                    <PagerStyle CssClass="GridPager" ForeColor="#333333" BackColor="#FFCC66" HorizontalAlign="Center" />
                    <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" />
                    <HeaderStyle CssClass="GridHeader" BackColor="#990000" Font-Bold="True" ForeColor="White"  />
                    <RowStyle CssClass="GridItem" BackColor="#FFFBD6" ForeColor="#333333" />
                    <AlternatingRowStyle  CssClass="GridAltItem" BackColor="White" />
                </asp:GridView>





        protected void btnDisable_Click(object sender, EventArgs e)
    {
            foreach (GridViewRow gvr in gvOrders.Rows)
            {

                if (((CheckBox)gvr.FindControl("cbPOID")).Checked == true)
                {
                    string strPrimaryid = gvr.Cells[2].ToString();
                }
            }

    }

1 Ответ

2 голосов
/ 11 июня 2010

Другой способ сделать это, чтобы избежать доступа к ячейкам GridView по индексу, - преобразовать желаемый BoundField в TemplateField в конструкторе. Затем используйте метод FindControl, чтобы получить текстовое значение в этой ячейке. По умолчанию дизайнер присваивает элементу управления Label нового TemplateField имя, например «Label1».

Я бы добавил несколько картинок, чтобы показать дизайнера, если бы этот процесс был проще. В любом случае, aspx изменится так, что вы можете сделать и вручную:

<asp:BoundField DataField="PurchaseOrderID" ...</asp:BoundField>

становится

<asp:TemplateField HeaderText="PurchaseOrderID">
 <ItemTemplate>
  <asp:Label ID="Label1" runat="server" Text='<%# Bind("PurchaseOrderID") %>'></asp:Label>
 </ItemTemplate>
 <EditItemTemplate>
  <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("PurchaseOrderID") %>'></asp:TextBox>
 </EditItemTemplate>
</asp:TemplateField>

Тогда вы сделаете это простое изменение кода:

string strPrimaryid = gvr.FindControl("Label1").Text;

Однако , я думаю, что лучший способ сделать это - использовать функции DataKeys элемента управления GridView. Первым шагом будет установка свойства DataKeyNames вашего GridView:

<asp:GridView ID="gvOrders" runat="server" DataKeyNames="PurchaseOrderID" ...>

Затем, предполагая, что ваш столбец PurchaseOrderID имеет тип int, вы должны изменить эту же строку на:

int primaryid = (int)gvOrders.DataKeys[gvr.RowIndex].Value;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...