第一次动态绑定时,GridView标题文本未显示

时间:2014-02-10 11:47:31

标签: c# asp.net gridview

我有一个GridView,在按钮点击时使用linq查询填充。

我必须动态填充标题文本,从数据库中获取。第一次单击按钮时,标题文本没有绑定。但是,如果我第二次点击按钮,标题文本就会被绑定。

标记:

   <asp:GridView ID="grdresult" runat="server" AutoGenerateColumns="false" 
            OnRowDataBound="grdresult_RowDataBound">                   
            <Columns>                        
                <asp:TemplateField HeaderStyle-Width="10%">
                    <ItemTemplate>
                       <asp:Label ID="lblCol1" runat="server" Text=' <%#Eval("Col1") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderStyle-Width="10%">
                    <ItemTemplate>
                        <asp:Label ID="lblCol2" runat="server" Text='<%#Eval("Col2") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderStyle-Width="10%">
                    <ItemTemplate>
                        <asp:Label runat="server" Text='<%#Eval("Col3") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderStyle-Width="10%">
                    <ItemTemplate>
                       <asp:Label ID="lblCol4" runat="server" Text=' <%#Eval("Col4") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderStyle-Width="10%">
                    <ItemTemplate>
                        <asp:Label ID="lblCol5" runat="server" Text='<%#Eval("Col5") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderStyle-Width="10%">
                    <ItemTemplate>
                       <asp:Label ID="lblCol6" runat="server" Text=' <%#Eval("Col6") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderStyle-Width="10%">
                    <ItemTemplate>
                       <asp:Label ID="lblCol7" runat="server" Text=' <%#Eval("Col7") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderStyle-Width="10%">
                    <ItemTemplate>
                       <asp:Label ID="lblCol8" runat="server" Text=' <%#Eval("Col8") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
            <EmptyDataTemplate>
            No Records Found
           </EmptyDataTemplate>
        </asp:GridView>

代码隐藏:

protected void btnreport_Click(object sender, EventArgs e)
{       
    BindGrid();     
}

protected void BindGrid()
{  
    var results = "LINQ select query from database";
                       }).Distinct().ToList();

    for (int i = 0; i < grdresult.Columns.Count; i++)
    {
        grdresult.Columns[i].Visible = true;
    }

    grdresult.DataSource = results;
    grdresult.DataBind();       

}

protected void grdresult_RowDataBound(object sender, GridViewRowEventArgs e)
{

    if (e.Row.RowType == DataControlRowType.Header)
    {
        var getColumnHeader = "LINQ query to get header text";
        if (getColumnHeader != null)
        {
            grdresult.Columns[5].HeaderText = getColumnHeader.HCol3;
            grdresult.Columns[6].HeaderText = getColumnHeader.HCol4;
            grdresult.Columns[7].HeaderText = getColumnHeader.HCol5;
            grdresult.Columns[8].HeaderText = getColumnHeader.HCol6;
            grdresult.Columns[9].HeaderText = getColumnHeader.HCol7;
            grdresult.Columns[10].HeaderText = getColumnHeader.HCol8;
            grdresult.Columns[11].HeaderText = getColumnHeader.HCol9;
            grdresult.Columns[12].HeaderText = getColumnHeader.HCol10;                    
        }
    }

    //based on some condition i have set visibility of gridview columns
    int TotalColumnCount = (int)ViewState["colcount"];
    for (int i = grdresult.Columns.Count - 1; i > TotalColumnCount + 4; i--)
    {
        grdresult.Columns[i].Visible = false;
    }        
}

3 个答案:

答案 0 :(得分:0)

而不是使用下面的行来绑定标题文本
grdresult.Columns [5] .HeaderText = getColumnHeader.HCol3;

我用下面的线解决了这个问题。

e.Row.Cells [5] .Text = getColumnHeader.HCol3;

答案 1 :(得分:0)

如果要将整数值转储到varchar()但varchar的大小不够,也会发生此错误。例如,我得到了这个错误,因为我将sum()转换为varchar(10),因此错误。

我将varchar(10)更改为varchar(20),错误得到解决。

答案 2 :(得分:-1)

在Gridview控件集!context.isConsole()