我的页面中有一个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来做到这一点?
谢谢
答案 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服务器上以资源方式)。但它可以作为一个简单的解决方案。