1
今私は以下のコードを持つGridviewを持っています。ループを使用して列を塗りつぶす必要のある動的なGridviewテーブルを作成する
<asp:GridView CssClass="grdInspStra" ID="grdInspStra" runat="server" AutoGenerateColumns="false" OnRowCreated="grdInspStra_RowCreated">
<AlternatingRowStyle CssClass="grdItemEven" />
<Columns>
<asp:TemplateField HeaderText="Zone Code" ItemStyle-CssClass="grdItemCenter">
<ItemTemplate>
<asp:Label ID="lblZone" runat="server" Text='<%# Eval("ZoneCode")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Group Code" ItemStyle-CssClass="grdItemCenter">
<ItemTemplate>
<asp:Label ID="lblGroup" runat="server" Text='<%# Eval("GroupCode")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Component Code" ItemStyle-CssClass="grdItemCenter">
<ItemTemplate>
<asp:Label ID="lblComp" runat="server" Text='<%# Eval("ComponentCode")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Component Tag No." ItemStyle-CssClass="grdItemCenter">
<ItemTemplate>
<asp:Label ID="lblCompTagNo" runat="server" Text='<%# Eval("ComponentTagRef")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Risk Category" ItemStyle-CssClass="grdItemCenter">
<ItemTemplate>
<asp:Label ID="lblRiskCat" runat="server" Text='<%# Eval("RiskCategory")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Proposed Interval" ItemStyle-CssClass="grdItemCenter">
<ItemTemplate>
<asp:Label ID="lblInterval" runat="server" Text='<%# Eval("ProposedInterval")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Latest Date" ItemStyle-CssClass="grdItemCenter">
<ItemTemplate>
<asp:Label ID="lblDateLatest" runat="server" Text='<%# Eval("DateLI")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="H1" ItemStyle-CssClass="grdItemCenter">
<ItemTemplate>
<asp:Label ID="lblFirstHalf0" runat="server" Text='<%# Eval("FirstHalf0")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="H2" ItemStyle-CssClass="grdItemCenter">
<ItemTemplate>
<asp:Label ID="lblSecondHalf0" runat="server" Text='<%# Eval("SecondHalf0")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
ただし、このコードを削除しようとしています。
<asp:TemplateField HeaderText="H1" ItemStyle-CssClass="grdItemCenter">
<ItemTemplate>
<asp:Label ID="lblFirstHalf0" runat="server" Text='<%# Eval("FirstHalf0")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="H2" ItemStyle-CssClass="grdItemCenter">
<ItemTemplate>
<asp:Label ID="lblSecondHalf0" runat="server" Text='<%# Eval("SecondHalf0")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
コードの最後にラベル名になる、ようH1
とH2
という名前の列が0 => 30から繰り返される必要がありますので、これはです。
<asp:Label ID="lblFirstHalf30" runat="server" Text='<%# Eval("FirstHalf30")%>'></asp:Label>
<asp:Label ID="lblSecondHal30" runat="server" Text='<%# Eval("SecondHalf30")%>'></asp:Label>
私はPage_Loadで列を作成することができます。
TemplateField tfield;
for (int i = 0; i < 31; i++)
{
tfield = new TemplateField();
tfield.HeaderText = "H1";
grdInspStra.Columns.Add(tfield);
tfield = new TemplateField();
tfield.HeaderText = "H2";
grdInspStra.Columns.Add(tfield);
}
しかし、C#を使用してラベルを付けてSQLサーバーからデータをバインドする方法はわかりません。
私はHow to add TemplateField programmaticallyからの例を試してみますが、それは単にループしないので間違った値になります。 (私はちょうどサーバからのデータをH2
に置くことをテストしたことに注意してください)
私は何をしようとしています。
TemplateField tfield;
for (int i = 0; i < 31; i++)
{
tfield = new TemplateField();
tfield.HeaderText = "H1";
tfield.ItemStyle.CssClass = "grdItemCenter";
grdInspStra.Columns.Add(tfield);
tfield = new TemplateField();
tfield.HeaderText = "H2";
tfield.ItemStyle.CssClass = "grdItemCenter";
tfield.ItemTemplate = new LabelColumn();
grdInspStra.Columns.Add(tfield);
}
class LabelColumn : ITemplate
{
public void InstantiateIn(Control container)
{
Label label = new Label();
label.ID = "lblSecondHalf";
label.DataBinding += new EventHandler(label_DataBinding);
container.Controls.Add(label);
}
private void label_DataBinding(Object sender, EventArgs e)
{
Label label = (Label)sender;
GridViewRow row = (GridViewRow)label.NamingContainer;
label.Text = DataBinder.Eval(row.DataItem, "SecondHalf0").ToString();
}
}
誰かがこの問題の解決に手伝ってもらえますか?