【问题标题】:asp.net multiple gridviews - not display dataasp.net 多个gridviews - 不显示数据
【发布时间】:2015-04-15 12:10:43
【问题描述】:

我有两个 GridView,我想显示来自两个 DataTables 的数据。在 aspx 文件中有我的 GridViews 代码:

 <div class="col-sm-5">
        <div class="col-sm-6">
            <asp:GridView ID="gvSource" runat="server" ShowHeaderWhenEmpty="true" CssClass="drag_drop_grid GridSrc" AutoGenerateColumns="false">
                <Columns>
                    <asp:TemplateField>
                        <HeaderTemplate>Miejsca (wybór)</HeaderTemplate>
                        <ItemTemplate>
                            <asp:Label ID="lblNazwa" runat="server" Text='<%# Eval("Nazwa") %>' />
                            <asp:HiddenField ID="IDVal" ClientIDMode="Static" runat="server" Value='<%# Eval("ID") %>' />
                        </ItemTemplate>
                    </asp:TemplateField>

                </Columns>

            </asp:GridView>
        </div>


        <div class="col-sm-6 pull-left">
            <asp:GridView ID="gvDest" runat="server" ShowHeaderWhenEmpty="true" EmptyDataText="No data to display" CssClass="drag_drop_grid GridDest" AutoGenerateColumns="false">
                <Columns>
                    <asp:TemplateField>
                        <HeaderTemplate>Miejsca (należące do wycieczki)</HeaderTemplate>
                        <ItemTemplate>
                            <asp:Label ID="lblNazwa"  runat="server" Text='<%# Eval("Nazwa") %>' />
                            <asp:HiddenField ID="IDVal" ClientIDMode="Static" runat="server" Value='<%# Eval("Id") %>' />
                        </ItemTemplate>
                    </asp:TemplateField>

                </Columns>

            </asp:GridView>
        </div>
    </div>

有我的代码隐藏:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {

            if (!string.IsNullOrWhiteSpace(Request.QueryString["id"]))
            {
                recID = int.Parse(Request.QueryString["id"]);
                if (recID > 0)
                {
                    DataTable dt = new DataTable();
                    DataTable dt2 = new DataTable();
                    dt.Columns.AddRange(new DataColumn[2] { new DataColumn("Id", typeof(int)), new DataColumn("Nazwa", typeof(string)) });
                    dt2.Columns.AddRange(new DataColumn[2] { new DataColumn("Id", typeof(int)), new DataColumn("Nazwa", typeof(string)) });

                    Miejsca ms = new Miejsca();
                    Hashtable hs = new Hashtable();


                    foreach (var lst in ms.PobierzMiejscaLista(hs))
                    {

                        dt.Rows.Add(lst.Id , lst.Nazwa);
                    }

                    gvSource.UseAccessibleHeader = true;
                    gvSource.DataSource = dt;

                    gvSource.DataBind();

                   dt.Rows.Clear();
                   dt.Rows.Add();

                    Wycieczka w = (new Wycieczki()).PobierzWycieczke(recID);



                    foreach (var lst in w.Miejsca)
                    {
                        Miejsce tempM = (new Miejsca()).PobierzMiejsce(lst.Id_Miejsce.Id);
                        dt2.Rows.Add(tempM.Id, tempM.Nazwa);

                    }
                    int ilosc = dt2.Rows.Count;
                    //gvDest.UseAccessibleHeader = true;
                    gvDest.DataSource = dt2;
                    gvDest.DataBind();


                    //Page.ClientScript.RegisterClientScriptBlock(typeof(Page), "TablicaMiejsc", "loadPlacesIntoTrip("+recID+");", true);
                }


            }
            else
            {
                DataTable dt = new DataTable();
                dt.Columns.AddRange(new DataColumn[2] { new DataColumn("Id"), new DataColumn("Nazwa") });


                Miejsca ms = new Miejsca();
                Hashtable hs = new Hashtable();

                foreach (var lst in ms.PobierzMiejscaLista(hs))
                {
                    //listMiejsc.Add(lst);
                    dt.Rows.Add(lst.Id, lst.Nazwa);
                }

                gvSource.UseAccessibleHeader = true;
                gvSource.DataSource = dt;

                gvSource.DataBind();

                dt.Rows.Clear();
                dt.Rows.Add();
                gvDest.DataSource = new List<String>();
                gvDest.DataBind();
                recID = 0;
            }

        }
    }

我不知道为什么,但只有一个 GridView (gvSource) 显示数据。 第二个 GridView (gvDest) 不显示数据。 当我调试代码时,我看到两个 DataTables 都有数据。两个 GridView 数据源也都有数据。但是只有一个 GridView 显示数据。

我使用 Nhibernate 来延迟加载 (w.Miejsca) 集合并从数据库中获取“Miejsce”或“Wycieczka”等对象。我还使用 JQuery 和 JQuery UI 来制作可排序的 GridView。

对不起,我的英语不好,这不是我的母语。 我希望你能帮助我:)

更新

我终于找到了造成这种情况的原因。 由于我的愚蠢,我浪费了很多时间:)

这行代码从 GridView 中移除了项目:

$("[id*=gvDest] tr:not(tr:first-child)").remove();

感谢您的建议。 问题解决了。

【问题讨论】:

  • 我不是数据表专家,但你为什么要清除你的 dt.Rows?
  • 我只是忘了删除这段代码。但是我在没有这段代码的情况下对其进行了测试,但没有任何帮助。
  • 代码中唯一可能不显示数据的部分是这一行:gvDest.DataSource = new List();您将一个空列表作为数据源?
  • 是的,但只有当我有 recid = 0 时。但我的问题是当我有 recid > 0 并且我想在 gridview 中显示数据时。我可能不知道 Eval 或 DataTable 是如何工作的,我做错了什么:(。

标签: c# asp.net gridview


【解决方案1】:

请从第二个网格视图中删除 ClientIDMode="Static" 并检查它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-03
    • 2014-01-18
    • 2012-10-07
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多