【问题标题】:Dynamically adding button to grid view动态添加按钮到网格视图
【发布时间】:2019-05-06 07:25:57
【问题描述】:

我的场景是我正在动态创建一个数据表并将后者添加到数据集中并在网格视图中显示它。我想在每行的末尾添加一个“添加到图表”按钮,该按钮将具有其他功能。

我创建动态数据表的代码:

    try
        {


            response = client.query(a);

            ///List of fields
            var fields = response.@return.fields;

            //loop through each column
            foreach (String column in fields)
            {
                dtservice.Columns.Add(column);

            }

            ///List of value return as list of object
            var values = response.@return.values.ToList();


            ///get the first object from the list of object
            foreach (object item in values)
            {
                if (item == null) continue;

                foreach (PropertyInfo property in item.GetType().GetProperties())
                {

                    // do something with the property 
                    List<string> valueList = (List<string>)(property.GetValue(item, null));
                    dtservice.Rows.Add(valueList.ToArray());


                }
            }


        }
        catch (Exception error)
        {

            var b = error.ToString();
        }

        //create dataset
        DataSet test= new DataSet();

        test.Tables.Add(dtservice);

        return test;


    }

我尝试过使用下面的代码,但是点击后按钮消失了。

    protected void WorkList_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        // CHECK IF ROW IS NOT IN EDIT MODE
        if (e.Row.RowType == DataControlRowType.DataRow)

        {
            // CREATE A Button
            Button btn = new Button();
            btn.ID = "btnEstados";
            btn.Text = "Estados";

            // ADD BUTTON TO EACH ROW IN 2ND COLUMN
            e.Row.Cells[7].Controls.Add(btn);
        }
    }

第二个问题现在我能够在每一行上获得按钮,但是使用下面的代码,我得到的列数等于 1。它实际上只读取 html 中添加的静态列,而不是生成的列动态的。

 //adding column to datatable
        for (int row = 0; row < test.Columns.Count - 1; row++)
        {

            ServiceName.Columns.Add(test.HeaderRow.Cells[row].Text, typeof(string));

        }

【问题讨论】:

  • 显示你的html代码

标签: c# asp.net gridview webforms


【解决方案1】:

这是在 Gridview 中添加按钮的另一种方式。

<asp:GridView ID="WorkList" runat="server" Width="100%" AutoGenerateColumns="false" AllowPaging="false" AllowSorting="false"
                            EmptyDataText="No Record Found"
                            OnRowCreated="WorkList_RowCreated"
                            OnRowCommand="WorkList_RowCommand"
                            OnRowCancelingEdit="WorkList_RowCancelingEdit"
                            OnRowEditing="WorkList_RowEditing">

                            <AlternatingRowStyle CssClass="alt" BackColor="#CCFF99"></AlternatingRowStyle>
                            <Columns>

                                <asp:ButtonField ButtonType="Button" CommandName="Estados" HeaderText="" ShowHeader="True" Text="Estados" ItemStyle-Width="30px" />
                            </Columns>
                            <HeaderStyle BackColor="#808080" ForeColor="#48D1CC" />

                        </asp:GridView>

在 WorkList_RowCommand 中:

int index = Convert.ToInt32(e.CommandArgument);
GridViewRow gvRow = WorkList.Rows[index];
WorkList.Rows[index];
 if (e.CommandName == "Estados")
 {
      //your code here like `gvRow.Cells[0].Text`
 }

确保您的WorkList 声明的属性存在于您的代码中。

希望对你有帮助。

【讨论】:

  • 我已经更新了问题,您的解决方案有效,但是在读取列数时,我只得到了在 html 中添加的那个。这就是为什么我主要想通过代码添加按钮
猜你喜欢
  • 1970-01-01
  • 2014-07-15
  • 1970-01-01
  • 1970-01-01
  • 2014-09-11
  • 1970-01-01
  • 2022-08-17
  • 1970-01-01
  • 2016-03-29
相关资源
最近更新 更多