首页 > 解决方案 > Gridview,asp.net中的动态数据不起作用?

问题描述

当我使用下面的代码时,我的 gridview (ID=Gridview2) 对象将使用硬编码的数据源完美填充。我想使用一个动态生成的数据表(在调试数据表​​时成功填充了行和列)。当我尝试将动态数据绑定到我的其他 gridview 对象 (ID=Gridview1) 并验证它是否将数据源作为我新创建的数据表时,屏幕上什么也没有出现?

我究竟做错了什么?我是否需要为动态代码定义模板才能工作?

<asp:GridView ID="GridView2" runat="server" AllowSorting="True" BackColor="#DEBA84" 
    BorderColor="#DEBA84" BorderStyle="None" BorderWidth="1px" CellPadding="3" 
    CellSpacing="2" DataSourceID="SqlDataSource1">
    <Columns>
        <asp:CommandField ShowEditButton="True" />
    </Columns>
    <FooterStyle BackColor="#F7DFB5" ForeColor="#8C4510" />
    <HeaderStyle BackColor="#A55129" Font-Bold="True" ForeColor="White" />
    <PagerStyle ForeColor="#8C4510" HorizontalAlign="Center" />
    <RowStyle BackColor="#FFF7E7" ForeColor="#8C4510" />
    <SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="White" />
    <SortedAscendingCellStyle BackColor="#FFF1D4" />
    <SortedAscendingHeaderStyle BackColor="#B95C30" />
    <SortedDescendingCellStyle BackColor="#F1E5CE" />
    <SortedDescendingHeaderStyle BackColor="#93451F" />
</asp:GridView>

<asp:GridView ID="GridView1" runat="server" AutoGenerateEditButton="true"
    EmptyDataText="No results found" BackColor="#DEBA84" BorderColor="#DEBA84" 
    BorderStyle="None" BorderWidth="1px" CellPadding="3" CellSpacing="2"
    AllowSorting="True" AutoGenerateColumns="True">
    <FooterStyle BackColor="#F7DFB5" ForeColor="#8C4510" />
    <HeaderStyle BackColor="#A55129" Font-Bold="True" ForeColor="White" />
    <PagerStyle ForeColor="#8C4510" HorizontalAlign="Center" />
    <RowStyle BackColor="#FFF7E7" ForeColor="#8C4510" />
    <SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="White" />
    <SortedAscendingCellStyle BackColor="#FFF1D4" />
    <SortedAscendingHeaderStyle BackColor="#B95C30" />
    <SortedDescendingCellStyle BackColor="#F1E5CE" />
    <SortedDescendingHeaderStyle BackColor="#93451F" />
</asp:GridView>

代码隐藏:

protected void btnSearch_Click(object sender, EventArgs e)
{       
    string domainToQueryFor = "domain";
    string pinToQueryFor = "account";
    DBConnectionlib.DBClass dbReader = new DBConnectionlib.DBClass();
    dbReader.connectionInformation = @"Server=tcp:XXXXXXXXX,1433 ;Database=" + databaseName + ";Trusted_Connection=false;UID=" + databaseUserName + ";Pwd=" + databasePassword + "; ApplicationIntent=ReadWrite;Timeout=60;MultiSubnetFailover=True";
    dbReader.tableName = tableName;
    string currentSqlQuery = "select * from " + dbReader.tableName + " WHERE domain like '" + domainToQueryFor + "' and pin like '" + pinToQueryFor + "'";
    dbReader.queryStatement = currentSqlQuery;
    List<string> results = dbReader.readFromSqlDatabaseReturnList();
    DataTable dt = createDataTable(results);
    GridView1.DataSource = dt;
    GridView1.DataBind();
}

标签: asp.netgridviewdatatableaspxgridview

解决方案


我必须添加它以使其动态描绘

foreach (System.Data.DataColumn item in dt.Columns)
            {
                BoundField nameColumn = new BoundField();
                nameColumn.DataField = item.ColumnName;
                nameColumn.HeaderText = item.ColumnName;
                GridView1.Columns.Add(nameColumn);
            }

基本上没有明确说明/添加的列名,gridview 将不会显示。它们可能也可以使用 <%bind%> 命令在 html 代码中进行硬编码,但我希望它更具动态性,所以我按照上述方式进行了操作。


推荐阅读