Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在asp.net中从列表填充gridview?_Asp.net_Database_Gridview - Fatal编程技术网

如何在asp.net中从列表填充gridview?

如何在asp.net中从列表填充gridview?,asp.net,database,gridview,Asp.net,Database,Gridview,我的页面中有一个gridview,我在其中显示了一些搜索结果。我是这样做的: int row = -1; int.TryParse(e.CommandArgument as string, out row); GridViewRow gdrow = instCourses.Rows[row]; // *** Get the underlying data item - in this case a DataRow DataRow

我的页面中有一个gridview,我在其中显示了一些搜索结果。我是这样做的:

int row = -1;
        int.TryParse(e.CommandArgument as string, out row);

        GridViewRow gdrow = instCourses.Rows[row];

        // *** Get the underlying data item - in this case a DataRow
        DataRow dr = ((DataTable)this.instCourses.DataSource).Rows[gdrow.DataItemIndex];

        // *** Retrieve our context
        string courseCode = dr["CourseCode"].ToString();
        string courseNumber = dr["CourseNumber"].ToString();
        string term = dr["Term"].ToString();
        SqlConnection con = new SqlConnection();
        con.ConnectionString = Userfunctions.GetConnectionString();
        con.Open();
        SqlCommand cmd=new SqlCommand("SELECT RegisterTable.StudentID, StudentTable.Name, StudentTable.Surname FROM RegisterTable JOIN StudentTable ON RegisterTable.StudentID = StudentTable.ID WHERE RegisterTable.CourseCode = @courseCode AND RegisterTable.Term = @term AND RegisterTable.CourseNumber = @courseNumber",con);
        cmd.Parameters.AddWithValue("@courseCode", courseCode);
        cmd.Parameters.AddWithValue("@courseNumber", courseNumber);
        cmd.Parameters.AddWithValue("@term", term);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataTable dt = new DataTable();
        da.Fill(dt);
        studList.DataSource = dt;
        studList.DataBind();
        Label1.Visible = true;
        Label1.Text = "Students who are registered to "+courseCode+ " " + courseNumber +" are listed below:";
但是我以前也做过同样的查询,并将结果保存在一个列表中,假设列表的名称是searchResults。我的问题是,我是否可以使用该列表中的项目来填充gridview,而不是再次查询数据库来填充表?或者我应该使用任何其他东西来代替gridview来执行此操作

谢谢

您可以使用列表(IEnumerable)作为gridview的数据源。 无需再次查询

    studList.DataSource = searchResults;
    studList.DataBind();

我误解了你的要求。您可以使用对象的
列表
作为数据源,方法与上面示例中使用数据表的方法相同。您只需确保公开希望GridView视为公共属性的类变量,如下所示:

public class Course
{
    public string courseCode { get; set; }
    public string courseName { get; set; }
    public string courseNumber { get; set; }

    //...the rest of your class code...//
}

如果要重用该数据表,我只会将其存储在会话中。因此,将其设置到数据源的位置:

DataTable dt = new DataTable();
da.Fill(dt);
studList.DataSource = dt;
另外,将其添加到会话中:

Session["mySearchResults"] = dt;
然后,您可以引用它来填充其他列表:

myOtherList.DataSource = (DataTable)Session["mySearchResults"];
myOtherList.DataBind();

请注意,如果此数据表非常庞大,或者如果您将有许多用户同时访问此应用程序,这种方法可能会带来问题(web服务器上的资源方面)。但它是一个简单的解决方案。

谢谢,但当我这样做时,它会说id为“searchResults”的GridView数据源没有任何用于生成列的属性或属性。确保您的数据源包含内容。你知道这个问题吗?看看jadarnel27下面的评论。不能映射字段。您需要将它们转换为公共属性。那应该行。谢谢,但实际上我想要的是使用list@bigO你能告诉我们更多关于名单的情况吗?你是说一个通用的
列表
?你在列表中放了什么?是的,我用的是通用列表。我把课程对象放在列表中,课程是我创建的一个类,它有字符串变量,比如courseCode、courseName和courseNumber。我想在我的列表中显示这些字段gridview@bigO啊,那应该没问题。您只需要将这些值设置为类中的公共属性(
publicstringcourseName{get;set;}
)。然后GridView将看到它们。这就是为什么你在Littlefool的回答中提到了错误。