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

时间:2013-06-05 14:10:15

标签: 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 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来做到这一点?

谢谢

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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服务器上以资源方式)。但它可以作为一个简单的解决方案。