1

我的页面中有一个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 来做到这一点?

谢谢

4

2 回答 2

1

我误解了你在问什么。您可以使用一个List<T>对象作为您的数据源,就像您在上面的示例中使用 DataTable 一样。您只需要确保将您希望 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,我会将其存储在 Session 中。因此,您将其设置为数据源:

DataTable dt = new DataTable();
da.Fill(dt);
studList.DataSource = dt;

另外,将其添加到会话中:

Session["mySearchResults"] = dt;

然后您可以参考它来填充您的其他列表:

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

请注意,如果这个 DataTable 真的很大,或者如果您将有很多用户同时访问这个应用程序,那么这种方法可能会带来问题(在您的 Web 服务器上的资源方面)。但它是一个简单的解决方案。

于 2013-06-05T14:16:12.090 回答
1

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

    studList.DataSource = searchResults;
    studList.DataBind();
于 2013-06-05T14:14:59.157 回答