2016-08-12 6 views
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> 

コードの最後にラベル名になる、ようH1H2という名前の列が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(); 
    } 
} 

誰かがこの問題の解決に手伝ってもらえますか?

答えて

0

午後休憩後、私はこの質問を解決することができます。

class LabelColumn : ITemplateint iの例を追加してください。

class LabelColumn : ITemplate 
{ 
    int i; 

    public LabelColumn(int i) 
    { 
     this.i = i; 
    } 

    public void InstantiateIn(Control container) 
    { 
     Label label = new Label(); 
     label.ID = "lblSecondHalf" + i; 
     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, "SecondHalf" + i).ToString(); 
    } 
} 
関連する問題