【问题标题】:Asp.net dynamic gridview buttonsAsp.net 动态网格视图按钮
【发布时间】:2014-09-11 21:32:19
【问题描述】:

我有一个填充了 SQL 数据的 gridview,我想将按钮/链接按钮动态添加到它的列中。

protected void gridview_RowDataBound(object sender, GridViewRowEventArgs e)
        {

            Button button = new Button();
            button.ID = "row" + e.Row.RowIndex;
            button.Text = "click me";
            button.Click += new EventHandler(Unnamed_Click);
            e.Row.Cells[1].Controls.Add(button);
        }

视觉上效果很好,但是当点击它时,它会回发并且更改会丢失。按钮不见了。

我可以在哪里重新创建它们以便它们持续存在?

【问题讨论】:

    标签: c# asp.net gridview


    【解决方案1】:

    您可以为按钮使用命令字段或模板字段, 以下是图片按钮的示例:

    <asp:CommandField ShowEditButton="true" EditImageUrl="~/images/edit.png" ButtonType="Image" ItemStyle-Width="20px" HeaderStyle-Width="20px" AccessibleHeaderText="Edit">
      <HeaderStyle Width="20px" />
       <ItemStyle Width="20px" />
    </asp:CommandField> 
    
    Or 
    
    <asp:TemplateField>
     <ItemTemplate>
      <asp:ImageButton ID="btnEdit" runat="server" CommandName="Edit"
       ImageUrl="~/images/edit.png" ToolTip="Click to Edit></asp:ImageButton>
     </ItemTemplate>
    </asp:TemplateField>
    

    【讨论】:

    • 是的,我刚刚意识到这样做更容易,因为值不需要从最初绑定的时候开始改变。谢谢。
    • 我只是想知道,有没有办法确定点击来自哪个 gridview 行?
    【解决方案2】:

    如果点击了“点击我”按钮,请使用以下步骤绕过网格绑定

    将您的 OnRowBound 函数代码更改为:

      protected void gridview_RowDataBound(object sender, GridViewRowEventArgs e)
            {
                if (e.Row.DataItemIndex != -1)
                {
                    Button button = new Button();
                    button.ID = "gridview1row" + e.Row.RowIndex;
                    button.UseSubmitBehavior = false;
                    button.Text = "click me";
                    button.Click += new EventHandler(Unnamed_Click);
                    e.Row.Cells[1].Controls.Add(button);
                }
            }
    

    在加载网格视图之前将以下检查添加到您的 Page_Load

         protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if ( Request.Params["__EventTarget"] == null || !Request.Params["__EventTarget"].Contains("gridview1row"))
                {
                    using (SqlConnection connection = new SqlConnection(GetConnectionString()))
                    {
                        using (SqlCommand command =
                            new SqlCommand("SELECT TOP 100 * FROM dbo.TableName", connection))
                        {
                            DataSet ds = new DataSet();
                            SqlDataAdapter da = new SqlDataAdapter();
                            da.SelectCommand = command;
                            da.Fill(ds);
                            GridView1.DataSource = ds;
                            GridView1.DataBind();
                        }
                    }
                }
    
            }
            catch (Exception ex)
            {
            }
    
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多