#c# #asp.net #gridview
#c# #asp.net #gridview
Вопрос:
Я пытаюсь добавить новый столбец в GridView, но он не отображается. Вот код, в котором я настраиваю DataTable и устанавливаю его в качестве источника данных GridView:
SqlDataAdapter da = new SqlDataAdapter();
DataTable dt = new DataTable();
SqlCommand cmd1;
DateTime d = DateTime.Now;
cmd1 = new SqlCommand("Proc_PopulateTitle", connection);
cmd1.CommandType = CommandType.StoredProcedure;
da.SelectCommand = cmd1;
da.Fill(dt);
dt.Columns.Add("Actions", Type.GetType("System.String"));
for (int i = 0; i < dt.Rows.Count; i )
{
DateTime de = DateTime.Parse(dt.Rows[i][7].ToString());
if (DateTime.Compare(de, d) < 0 || DateTime.Compare(de, d)==0)
{
dt.Rows[i]["Actions"] = "OPen";
}
else
{
dt.Rows[i]["Actions"] = "Expired";
}
}
dt.GetChanges();
dt.AcceptChanges();
gvFaxView.DataSource = dt;
gvFaxView.DataBind();
Вот код разметки на стороне сервера GridView:
<asp:GridView ID="gvFaxView" runat="server" AllowPaging="True" AutoGenerateColumns="False"
AutoGenerateSelectButton="True" CaptionAlign="Top" CssClass="text10" DataKeyNames="Fax_ID"
PageSize="5" OnPageIndexChanging="gvFaxView_PageIndexChanging" OnSelectedIndexChanged="gvFaxView_SelectedIndexChanged">
<FooterStyle BackColor="#348EC2" Font-Bold="True" ForeColor="White" />
<Columns>
<asp:TemplateField HeaderText="Fax Title">
<ItemTemplate>
<asp:Label ID="lbgvName" runat="server" Text='<%# Eval("Fax_Title") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Fax Date">
<ItemTemplate>
<asp:Label ID="lbgvType" runat="server" Text='<%# Eval("Fax_Date") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Fax Status">
<ItemTemplate>
<asp:Label ID="lbgvfName" runat="server" Text='<%# Eval("Fax_status") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Fax Expire Date">
<ItemTemplate>
<asp:Label ID="lbgvNic" runat="server" Text='<%# Eval("Fax_Exp_Date") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Open/Expire">
<ItemTemplate>
<asp:Label ID="lbgvopenexp" runat="server" Text="Open"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
<EditRowStyle BackColor="#999999" />
<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
<PagerStyle BackColor="Maroon" ForeColor="White" HorizontalAlign="Center" />
<HeaderStyle BackColor="Maroon" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
</asp:GridView>
Комментарии:
1. Можете ли вы опубликовать код для своего gridview?
2. Это ASP.NET , есть ли у вас
AutoGenerateColumns=true
?3. @TimSchmelter когда я устанавливаю это свойство, я получаю столбец, который вы указали правильно, но я не хочу показывать весь столбец в моем представлении сетки
4. @Rania: Я спросил, установили ли вы для него значение true, это не было рекомендацией. На самом деле он должен быть установлен в
false
, иначе вы не сможете добавлять столбцы динамически.
Ответ №1:
Я бы установил AutoGenerateColumns = False
и удалил весь ваш <Columns>...</Columns>
тег. Поскольку вы в значительной степени создаете свою собственную таблицу данных, просто установите ее в качестве источника и свяжите. ASP должен сделать все остальное.
Ответ №2:
Поскольку это веб-формы, вам может потребоваться выполнить ваш код до того, как форма будет отображена в методе, подобном Page_PreInit .