如何从GridView当前行中选择所有数据

时间:2012-02-08 13:05:52

标签: c# asp.net

如何从GridView当前行中选择所有数据。 我在GridView中有一个用于编辑链接的列。当"编辑"单击链接按钮,我想使用所选行的数据。我正在尝试以下代码,但是它返回了一个空值

protected void gv_RowEditing(object sender, GridViewEditEventArgs e)
{
    gv.EditIndex = -1;
    GridViewRow gvRow = gv.Rows[ e.NewEditIndex];
    string selectedID = gvRow.Cells[3].Text;
}

                 <asp:GridView runat = "server" ID="gvRange0" SkinID="gridView"                AutoGenerateColumns="False"  
                            AllowSorting="True"   OnRowCancelingEdit="gvRange_RowCancelingEdit" OnRowDeleting="gvRange_RowDeleting"
                            OnRowEditing="gvRange_RowEditing" OnRowUpdating="gvRange_RowUpdating" 
                                Width="684px"  OnRowDataBound="gvRange_RowDataBound"  
                            DataMember="DefaultView" OnPageIndexChanged="gvRange_PageIndexChanged" 
                            OnPageIndexChanging="gvRange_PageIndexChanging" OnSorting="gvRange_Sorting" DataKeyNames = "RANGE_ID" 
                            OnSelectedIndexChanged="gvRange_SelectedIndexChanged" Height="65px" >
                              <Columns>
                                  <asp:TemplateField ShowHeader="False">
                                      <ItemTemplate>
                                      <ControlStyle Width="2px" />
                                          <asp:LinkButton ID="lnkDelete0" runat="server" CssClass="lnk" 
                                              CausesValidation="False" CommandName="Delete"
                                              Text="Delete" Visible="false"></asp:LinkButton>
                                          <asp:CheckBox runat="server" ID="chkSelect" CssClass="lbl" Text="" AutoPostBack="False" OnCheckedChanged="chkSelect_CheckedChanged" />
                                      </ItemTemplate>
                                  </asp:TemplateField>
                                  <asp:TemplateField ShowHeader="False">
                                    <ItemTemplate>
                                    <controlStyle width="2px" />
                                      <asp:LinkButton ID="lnkEdit" runat="server" CssClass="lnk" CausesValidation="False" CommandName="Edit"
                                        Text="Edit" ></asp:LinkButton>

                                    </ItemTemplate>
                                    <ItemStyle Width="5px" />
                                  </asp:TemplateField>
                                  <asp:TemplateField HeaderText="Ranges" SortExpression="Sort_Ranges">
                                      <ControlStyle Width="5px" />
                                      <ItemTemplate>
                                      <%#DataBinder.Eval(Container.DataItem,"Min_Age") %>

                                      <%# CheckNull(DataBinder.Eval(Container.DataItem,"Max_Age")) %>
                                      </ItemTemplate>
                                     <%-- <ItemTemplate>--%>
                                          <%--<asp:Label ID="lblStageName" CssClass="lbl" runat="server" Text='<%# Bind("Age_Range") %>' Width="1px"></asp:Label>--%>
                                    <%--  </ItemTemplate>--%>
                                  </asp:TemplateField>
                                  <asp:TemplateField HeaderText="Range ID">
                                  <ItemTemplate><%#DataBinder.Eval(Container.DataItem,"RANGE_ID") %></ItemTemplate>
                                  </asp:TemplateField>
                              </Columns>                        
                          </asp:GridView>

GridView中有4列。一个包含复选框,第二个是用于编辑的链接按钮,第三个数据绑定带有一些值,第四个是我想用来从数据库中获取一些值的列(那是主键),这个列是隐藏的。

2 个答案:

答案 0 :(得分:1)

有时在gridview单元格中创建子控件。  你可以尝试这个代码。可能会解决它。

 protected void gv_RowEditing(object sender, GridViewEditEventArgs e)
 {
   gv.EditIndex = -1;

   GridViewRow gvRow= (GridViewRow)(((Button)e.CommandSource).NamingContainer);


  foreach (TableCell Tc in gvRow.Cells)
            {
               //if you are not getting value than find childcontrol of TabelCell.
                string sss = c.Text;
                foreach (Control ctl in Tc.Controls)
                {

                    //Child controls
                    Label lb = ctl as Label;
                    string s = lb.Text;
                    sb.Append(s + ',');
                }
            }
}

答案 1 :(得分:0)

我注意到您说您需要访问第4列但是您正在使用gvRow.Cells[3].Text;

Cell对象中的索引从1开始,因此如果您需要访问网格视图中的第4行,请尝试以下操作:

string selectedID = gvRow.Cells[4].Text;

修改

请你帮我确认两件事

1)点击lnkEdit时是否会引发GridView1_RowEditing事件?

2)如果是,e.NewEditIndex值是否始终显示为“0”?   尝试单击不同行的编辑链接,结果始终为“0”?