Динамически добавление кнопки в виде сетки - PullRequest
0 голосов
/ 06 мая 2019

Мой сценарий заключается в том, что я динамически создаю таблицу данных и добавляю ее в набор данных и отображаю ее в виде сетки. Я хочу добавить кнопку «Добавить в график» в конце каждой строки, которая будет иметь дополнительные функции.

Мой код для создания таблицы динамических данных:

    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));

        }

1 Ответ

0 голосов
/ 06 мая 2019

Это другой способ добавления кнопки в 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, существует вВаш код позади.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...