【问题标题】:Buttons in gridview controlgridview 控件中的按钮
【发布时间】:2010-09-25 09:52:33
【问题描述】:

我有一个显示从数据库返回的数据的 gridview 控件。 gridview的datakey属性绑定到DB的ID列

GV 中的每条记录都有 2 个按钮和一个复选框。当单击这些控件中的任何一个时,我想获取单击该控件的行并根据单击的控件执行操作。

我希望我可以使用 row_command 事件来捕获单击了哪个控件,但除非我遗漏了什么,否则这并没有起到作用

【问题讨论】:

    标签: asp.net visual-studio-2008 gridview .net-3.5


    【解决方案1】:

    您是否分配了按钮的CommandNameCommandArgument

    【讨论】:

    • devio:我关注了这个msdn.microsoft.com/en-us/library/…
    • 这不能回答我的问题
    • devio:是的,我确实将命令名称和参数分配给了按钮,但没有分配给复选框
    【解决方案2】:

    问题也可能在于生命周期事件的错误顺序。您应该尽快将数据重新绑定到网格。尝试将数据绑定移至Page_Init 事件

    【讨论】:

      【解决方案3】:

      代码背后:

      protected void gvCustomers_RowCommand(object sender, GridViewCommandEventArgs e)
      {
          if (e.CommandName.Equals("RowSelected"))
          {
              GridViewRow row = (((e.CommandSource) as Button).NamingContainer) as GridViewRow;
              Label label = row.FindControl("lblFirstName") as Label;
      
              Response.Write(label.Text);
          }
      }
      

      这是 ASPX 视图:

      <asp:GridView AutoGenerateColumns="false" ID="gvCustomers" runat="server" OnRowCommand="gvCustomers_RowCommand" >
      
          <Columns>
      
              <asp:TemplateField>
                  <ItemTemplate>
      
                      <asp:Label ID="lblFirstName" runat="server" Text ='<%# Eval("FirstName") %>' />
      
                 </ItemTemplate>
             </asp:TemplateField>
      
             <asp:TemplateField>
                 <ItemTemplate>
                     <asp:Button Text="Select" ID="btn1" runat="server" CommandArgument ='<%# Eval("FirstName") %>' CommandName="RowSelected" />
                 </ItemTemplate>
             </asp:TemplateField>
      
          </Columns>
      
      </asp:GridView>
      

      【讨论】:

        【解决方案4】:
        <asp:GridView ID="gvProduct" runat="server" AutoGenerateColumns="False" DataKeyNames="ID"OnRowCommand="gvProduct_RowCommand" >
            <Columns>
               <asp:TemplateField>
                   <ItemTemplate>
                       <asp:ImageButton ID="btnEdit" runat="server" CommandName="EditCommand" Text="Edit" />
                   </ItemTemplate>                                         
               </asp:TemplateField>
               <asp:BoundField DataField="ProjectNo" HeaderText="ProjectNo" />
               <asp:BoundField DataField="Date" HeaderText="Date" />
               <asp:BoundField DataField="Shift" HeaderText="شیفت" />
            </Columns>         
        </asp:GridView>
        

        这是代码:

        protected void gvProduct_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "EditCommand")
            {
                GridViewRow Row = (GridViewRow)((Control)e.CommandSource).NamingContainer;
                int productID = Convert.ToInt32(gvProduct.DataKeys[Row.RowIndex].Value);
        
                EditFunction(productID);
            }
        }
        

        EditFunction 是您为选定行设置代码的函数,我在此处将其删除。

        你需要这样的东西吗?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-10-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-03
          相关资源
          最近更新 更多