【问题标题】:asp.net Gridview does not displayasp.net Gridview 不显示
【发布时间】:2020-04-02 08:15:31
【问题描述】:

我尝试将我的对象列表绑定到我的数据源。 但是当我从 autogeneratecolums 切换到 boundfields 时,整个网格不再显示。 让这项工作正常进行是我想念的吗?

asp:

<asp:GridView ID="grid_article"
            AutoGenerateColumns="false"
            runat="server"
            GridLines="None"
            AllowPaging="true"
            CssClass="mGrid"
            PagerStyle-CssClass="pgr"
            AlternatingRowStyle-CssClass="alt"
            OnPageIndexChanging="ArticleGrid_PageIndexChanging">
            <Columns>
                <asp:TemplateField HeaderText="Select">
                    <ItemTemplate>
                        <asp:CheckBox ID="cbSelect" runat="server" ReadOnly="false"></asp:CheckBox>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:BoundField DataField="itemNumber" HeaderText="Product Number" ReadOnly="true"></asp:BoundField>
                <asp:BoundField DataField="name" HeaderText="Product Name" ReadOnly="true"></asp:BoundField>
                <asp:BoundField DataField="description" HeaderText="Product Description" ReadOnly="true"></asp:BoundField>
                <asp:BoundField DataField="purchasePrice" HeaderText="Purchase Price" ReadOnly="true"></asp:BoundField>
                <asp:BoundField DataField="salesPrice" HeaderText="Sales Price" ReadOnly="true"></asp:BoundField>
            </Columns>
        </asp:GridView>

后面的代码:

  if (articles != null)
        {
            if (articles.Count != 0)
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("itemNumber");
                dt.Columns.Add("name");
                dt.Columns.Add("description");
                dt.Columns.Add("purchasePrice");
                dt.Columns.Add("salesPrice");

                foreach (AccessoryDTO item in articles)
                {
                    DataRow dr = dt.NewRow();
                    dr["itemNumber"] = item.itemNumber;
                    dr["name"] = item.name;
                    dr["description"] = item.description;
                    dr["purchasePrice"] = item.purchasePrice + " " + item.currency;
                    dr["salesPrice"] = item.salesPrice + " " + item.currency;
                    dt.Rows.Add(dr);
                }
                grid_article.DataSource = dt;
                show_record_count(articles.Count);
                grid_article.DataBind();
            }
            else
            {
                grid_article.DataSource = null;
                grid_article.DataBind();
            }
        }

【问题讨论】:

  • 查看this链接
  • @NeelDarji 我的行名是 1:1 作为给定的数据字段,所以我不知道在这里检查什么
  • 查看sqldatasource及备注
  • @NeelDarji - 因为我使用修复对象而不是 sql,所以我不需要数据源详细信息。
  • 试试readonly=false

标签: c# asp.net gridview data-binding


【解决方案1】:

试试我在 sharepoint 2013 中使用的这段代码:

<asp:GridView ID="OffresGrid" CssClass="dataTable"  runat="server" AutoGenerateColumns="false" EmptyDataText="Pas de données." AllowPaging="True" PageSize="1000" OnPageIndexChanging="OffresGrid_PageIndexChanging" OnRowDataBound="OffresGrid_RowDataBound" >
<Columns>
    <asp:TemplateField HeaderText="Secteur">
        <ItemTemplate>
            <asp:Label ID="Secteur" runat="server" Text='<%#Eval("Secteur") %>' ></asp:Label>
        </ItemTemplate>
    </asp:TemplateField>

    <asp:TemplateField HeaderText="Réference">
        <ItemTemplate>
            <asp:LinkButton ID="Reference" runat="server" Text='<%#Eval("Reference") %>' OnCommand="reference_Command" CommandArgument='<%#Eval("Reference") %>'></asp:LinkButton>
        </ItemTemplate>
    </asp:TemplateField>

    <asp:TemplateField HeaderText="Titre">
        <ItemTemplate>
            <asp:Label ID="Title" runat="server" Text='<%#Eval("Title")%>'/>
        </ItemTemplate>
    </asp:TemplateField>

    <asp:TemplateField HeaderText="Date limité">
        <ItemTemplate>
            <asp:Label ID="DateLimite" runat="server" Text='<%#Eval("DateLimite")%>'/>
        </ItemTemplate>
    </asp:TemplateField>

    <asp:TemplateField HeaderText="Date de publication">
        <ItemTemplate>
            <asp:Label ID="DatePublication" runat="server" Text='<%#Eval("DatePublication")%>'/>
        </ItemTemplate>
    </asp:TemplateField>

    <asp:TemplateField HeaderText="Lieux">
        <ItemTemplate>
            <asp:Label ID="Lieux" runat="server" Text='<%#Eval("Lieux")%>'/>
        </ItemTemplate>
    </asp:TemplateField>
</Columns>

C#代码:

DataTable dt = new DataTable();
        string Secteur, Reference, Title, DateLimite, DatePublication, Lieux;
        dt.Columns.Add("Secteur", typeof(string));
        dt.Columns.Add("Reference", typeof(string));
        dt.Columns.Add("Title", typeof(string));
        dt.Columns.Add("DateLimite", typeof(string));
        dt.Columns.Add("DatePublication", typeof(string));
        dt.Columns.Add("Lieux", typeof(string));

        try
        {
            using (SPSite site = new SPSite(SPContext.Current.Site.Url))
            {
                using (SPWeb web = site.OpenWeb())
                {
                    SPList list = web.Lists["Offres"];


                    SPListItemCollection coll = list.Items;
                    foreach (SPListItem item in coll)
                    {
                        if (item["Secteur"] != null)
                        {
                            Secteur = item["Secteur"].ToString();
                        }
                        else
                        {
                            Secteur = "";
                        }


                        if (item["Reference"] != null)
                            Reference = item["Reference"].ToString();
                        else
                            Reference = " ";

                        if (item["Title"] != null)
                            Title = item["Title"].ToString();
                        else
                            Title = " ";

                        if (item["DateLimite"] != null)
                            DateLimite = item["DateLimite"].ToString();
                        else
                            DateLimite = " ";

                        if (item["DatePublication"] != null)
                            DatePublication = item["DatePublication"].ToString();
                        else
                            DatePublication = " ";

                        if (item["Lieux"] != null)
                            Lieux = item["Lieux"].ToString();
                        else
                            Lieux = " ";


                        dt.Rows.Add(Secteur, Reference, Title, DateLimite, 
                          DatePublication, Lieux);
                    }
                    OffresGrid.DataSource = dt;
                    OffresGrid.DataBind();
                }
            }
        }
        catch (Exception )
        {
        }

【讨论】:

  • 我相应地将 BoundField 更改为 TemplateField,但仍然是一个空网格:/
  • 请检查这些行 if (articles != null) { if (articles.Count != 0) {......} } 和 'articles' 变量中的值
  • @usha 列表文章已填满。每个元素的每个属性都是 != null。当我查看调试器时。数据表行数为 55(如预期)。