2013-06-05 4 views
1

내 페이지에 gridview가 있고 일부 검색 결과가 표시됩니다.asp.net에서 목록에서 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:"; 

하지만 난 이미의 목록의 이름의 SearchResult라고하자, 이전과 같은 쿼리를 수행하고 목록에서 결과를 지켰다 : 여기에 내가 그것을 할 방법이다. 내 질문은 테이블을 채우기 위해 데이터베이스를 다시 쿼리하는 대신 해당 목록의 항목을 사용하여 gridview를 채울 수 있습니까? 아니면 gridview 대신 다른 작업을 사용해야합니까?

답변

1

당신은 당신의 gridview의 데이터 소스로 목록 (IEnumerable을)를 사용할 수 있습니다 감사합니다. 필요 다시

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

고마워요,하지만 이럴 때 ID가 'searchResults'인 GridView의 데이터 소스에 열을 생성 할 속성이나 속성이 없었습니다. 데이터 원본에 내용이 있는지 확인하십시오. 문제에 대한 어떤 생각? – yrazlik

+0

아래의 jadarnel27 님의 의견을보세요. 필드를 매핑 할 수 없습니다. 공용 속성으로 변환해야합니다. 그게 효과가있다. – Ronald

1

를 조회하지 않으려면 난 당신이 요구 한 것을 오해. 위의 예에서 DataTable을 사용하는 것과 같은 방법으로 List<T> 개의 개체를 데이터 원본으로 사용할 수 있습니다. 당신이 당신의 GridView는 공공 속성을 참조 할 클래스 변수에 노출 당신이 단지 확인해야 -이 같은 : 당신이 DataTable에 재사용 될하려는 경우

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; 

또한, 세션에 추가 :

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

참고 :

Session["mySearchResults"] = dt; 

그런 다음 다른 목록을 채우는 것을 참조 할 수 있습니다 이 DataTable이 정말 큰 경우 또는 한꺼번에 많은 사용자가이 응용 프로그램에 액세스 할 경우이 방법을 사용하면 문제가 발생할 수 있습니다 (웹 서버에서 자원별로). 그러나 그것은 간단한 해결책으로 작동합니다.

+0

감사합니다.하지만 실제로 원하는 것은 목록을 사용하여 gridview를 채우는 것입니다. – yrazlik

+0

@bigO 목록에 대해 더 자세히 알려 주실 수 있습니까? 일반적인'List '을 의미합니까? 너는 무엇을 목록에 넣고 있니? – jadarnel27

+0

예, 제네릭 목록을 사용하고 있습니다. Course 객체를 목록에 넣습니다. 물론 courseCode, courseName 및 courseNumber와 같은 문자열 변수가 있습니다. 이 필드를 내 gridview에 표시하고 싶습니다 – yrazlik

관련 문제