Поле флажка не отображается в gridview

#c# #asp.net #.net #razor

#c# #asp.net #.net #razor

Вопрос:

Я работаю в asp.net . Пытаюсь отобразить данные в gridview, полученные из веб-службы. Я хочу, чтобы в gridview было пять полей, одно поле флажка, а остальные четыре — значения из сервиса, т.Е.

 CheckboxField,FirstName,LastName,OffenseName,FineAmount
  

1 ) Ниже приведен код gridview, который я просто перетащил на страницу

 <asp:GridView ID="GridView1" runat="server">
      <HeaderStyle BackColor="#CCFF33" />
</asp:GridView>
  

2 ) Ниже приведен мой метод, который я вызываю, для создания полей в DataTable, которые я позже привяжу к gridview.

 DataTable table = new DataTable();
table.Columns.Add("Select", typeof(CheckBox)); // i think problem is here
table.Columns.Add("FirstName", typeof(string));
table.Columns.Add("LastName", typeof(string));
table.Columns.Add("OffenseName", typeof(string));
table.Columns.Add("FineAmount", typeof(string));
  

3) Ниже приведен код, который заполняет таблицу данных данными

 for (int i = 0; i < noOfContacts; i  )
{
        object[] rowVals = new object[5];        
       rowVals[0] = giveCheckBox(i);             // this method is declared below, which gives me a checkbox with unique id
       rowVals[1] = listOfContacts[i].FirstName;
       rowVals[2] = listOfContacts[i].LastName;
       rowVals[3] = listOfCharges[j].GHQOffenseId;
       rowVals[4] = listOfCharges[j].GHQFineAmount;
       table.Rows.Add(rowVals);
}
            GridView1.DataSource = table;
            GridView1.DataBind();
  

4) Это метод, который дает мне флажок с уникальным идентификатором

 public CheckBox giveCheckBox(int i)
    {
        CheckBox chk = new CheckBox();
        chk.ID = "chk_"   i;
        chk.Text = "Pay";
        return chk;
    }
  

Проблема в том, что при запуске программы отображаются только четыре поля, но не первое поле флажка. Я хочу отменить это обязательное условие.
Но если я добавлю поле флажка в режиме проектирования (щелкните стрелку в gridview, нажмите Добавить новые поля), то он выдает исключение в строке привязки, т.Е.

 GridView1.DataBind();
  

Пожалуйста, подскажите мне, как сделать поле флажка видимым.

Ответ №1:

Вы можете вставить все свои поля в дизайн, как показано в приведенном ниже коде :

 <asp:GridView ID="GridView1" runat="server">
    <HeaderStyle BackColor="#CCFF33" />
        <Columns>
            <asp:TemplateField>
               <ItemTemplate>
                    <asp:CheckBox runat="server" ID="chk_box" />
               </ItemTemplate>
            </asp:TemplateField>

            <asp:BoundField DataField="FirstName" HeaderText="FirstName" />
            <asp:BoundField DataField="LastName" HeaderText="LastName" />
            <asp:BoundField DataField="OffenseName" HeaderText="OffenseName" />
            <asp:BoundField DataField="FineAmount" HeaderText="FineAmount" />
        </Columns>
</asp:GridView>
  

и для кода, лежащего в основе:

 DataTable table = new DataTable();

for (int i = 0; i < 2; i  )
{
            DataRow dr = table.NewRow();
            dr["FirstName"] = "Ahmed";
            dr["LastName"] = "Ahmed";
            dr["OffenseName"] = "Ahmed";
            dr["FineAmount"] = "Ahmed";
            table.Rows.Add(dr);
}

GridView1.DataSource = table;
GridView1.DataBind();
  

Ответ №2:

Вместо добавления флажка в вашу таблицу (что в любом случае неправильно) добавьте поле шаблона в gridview, как показано ниже. Также укажите AutoGenerateColumns=true. Затем удалите весь код в вашем codebehind, который пытается добавить столбец флажка в таблицу и gridview.

 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="True">
<Columns>
<asp:TemplateField ShowHeader="False" >
                <ItemTemplate>
                    <asp:CheckBox ID="checkBoxSelect" runat="server" />
                </ItemTemplate>

            </asp:TemplateField>
<HeaderStyle BackColor="#CCFF33" />
</Columns>
</asp:GridView>
  

Комментарии:

1. Я получаю следующую ошибку, теперь введите ‘System.Web.UI.WebControls. У GridView ‘ нет общедоступного свойства с именем ‘TemplateField’ Типа ‘System.Web.UI.WebControls. У GridView’ нет общедоступного свойства с именем ‘ItemTemplate’ Типа ‘System.Web.UI.WebControls. У GridView ‘ нет общедоступного свойства с именем ‘Checkbox’

2. извините за ошибку, templatecolumn должен быть в разделе <Столбцы>. отредактировал ответ

Ответ №3:

Да, вы правы, проблема заключается именно в этом фрагменте кода. Замените следующую строку

 table.Columns.Add("Select", typeof(CheckBox));
  

с этим

 table.Columns.Add("Select", typeof(bool));