Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用循环创建需要填充列的动态Gridview表_C#_Asp.net_Gridview - Fatal编程技术网

C# 使用循环创建需要填充列的动态Gridview表

C# 使用循环创建需要填充列的动态Gridview表,c#,asp.net,gridview,C#,Asp.net,Gridview,现在我有了一个Gridview,其中包含以下代码: <asp:GridView CssClass="grdInspStra" ID="grdInspStra" runat="server" AutoGenerateColumns="false" OnRowCreated="grdInspStra_RowCreated"> <AlternatingRowStyle CssClass="grdItemEven" /> <Columns>

现在我有了一个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>
我设法在页面加载中使用创建列

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

有人能帮我解决这个问题吗?

午休后,我设法解决了这个问题

类标签列中:ITemplate
只需添加
inti
,示例

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();
    }
}

午休后我设法解决了这个问题

类标签列中:ITemplate
只需添加
inti
,示例

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();
    }
}
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();
    }
}
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();
    }
}