1

ページにグリッドビューがあり、いくつかの検索結果を表示しています。これが私がそれを行う方法です:

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 の代わりに他のものを使用する必要がありますか?

ありがとうございました

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 を再利用する場合は、それをセッションに保存します。したがって、データソースに設定する場所:

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) をグリッドビューのデータソースとして使用できます。再度クエリする必要はありません

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