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