如何填充列表<>在两个不同的Gridview中

本文关键字:两个 Gridview 何填充 填充 列表 | 更新日期: 2023-09-27 18:02:53

根据我提供的答案和意见,我做了如下修改。因为我有其他的东西比两个Gridviews我没有做任何修改加载方法。我试图在绑定集合时拆分集合。

Gridviews是:

<asp:GridView id ="gvClosed" runat = "server"/>
<asp:GridView id ="gvDraft" runat = "server"/>

The Bind:它在两个GV的

中绑定相同的数据
private void bindFiles(bool reload)
        {
            int size = 10;
            List<File> closedFiles = new List<File>();
            List<File> draftFiles = new List<File>();
            if (ViewState["Files"] != null)
                closedFiles = (List<File>)ViewState["Files"];
                //draftFiles= (List<File>)ViewState["Drafts"];
            else
                closedFiles = loadFiles(((User)Session["currentUser"]).ID);

            draftFiles = loadFiles(((User)Session["currentUser"]).ID);
            List<File> listFiles = new List<File>();
            foreach (File f in closedFiles)
                listFiles.Add(f);
            bool loadPrimary = Session["filterPrimary"] != null ? Convert.ToBoolean : false;
            bool loadAll = Session["ViewAllUserFiles"] != null ? Convert.ToBoolean : false;

            foreach (File d in draftFiles)
                listFiles.Add(d);
            if (loadPrimary)
                listFiles = listFiles.FindAll(delegate(File f) 
                { 
                return f.Modified == true; 
                });
            //Binding to the database
            gvFiles.DataSource = listFiles;
            gvFiles.DataBind();
            gvDraftFiles.DataSource = listFiles;
            gvDraftFiles.DataBind();
            showHideSortArrows(gvFiles, GridViewType.File);
            //showHideSortArrows(gvDraftFiles, GridViewType.Drafts);

如何填充列表<>在两个不同的Gridview中

将集合拆分为两个集合,然后分别将它们单独绑定到相应的GridViews。更好的做法是,向您的加载方法传递一个参数,您可以在查询中使用该参数来指定您尝试加载的列表类型。这样你就可以使用一个方法来加载你的列表,而不必拆分任何东西。

如果两个列表包含相同的数据,并且您希望将相同的数据绑定到两个或多个控件,您可以这样做。你不需要把它分成不同的列表。

即使你只希望将数据的一个子集绑定到不同的控件,你也可以使用Linq来实现,因为Linq的结果集总是t的IEnumerable

例如:

    List<string> someList = GetStuffFromDatabase();
    // binding to first control, all data
    datagridControl1.DataSource = someList;  
    // binding to second control with subset of data
    dropdownListControl1.DataSource = someList.AsEnumerable().Where( t => t.StartsWith("US-") );

等等…这同样适用于所有类型的集合……字典等

ASPX:

<asp:GridView id="gvDraft" runat="server" />
<asp:GridView id="gvClosed" runat="server" />
c#

:

closedList = new List<list>();
draftList = new List<list>();
if (ds.Tables.Count != 0)
{
   foreach (DataRow dr in ds.Tables[0].Rows)
   {
       List ls = new List();
       if (dr["list_id"] != DBNull.Value)
       {
            ls.ID = Convert.ToInt32(dr["list_id"]);
            //I have more this is just for example
            if(dr["WhateverIndicatesClosed"] == true)
            {
               closedList.Add(ls);
            }else{
               draftList.Add(ls);
            }
       }
   }
}
gvDraft.DataSource = draftList;
gvDraft.DataBind();
gvClosed.DataSource = closedList;
gvClosed.DataBind();

您也可以使用linq来分隔列表,但由于您正在遍历数据集,因此您最好在那里拆分列表。