2013-03-08 3 views
0

datagridview에 첫 번째 이름 만 표시하려고합니다. 이것은 내 쿼리이지만 아무 것도 반환하지 않습니다.데이터 그램보기의 데이터베이스에서 단일 행 표시

sc.Open(); 
cmd.CommandText = "select * from myEmployees where JobRole ='Waiter'"; 
dr = cmd.ExecuteReader(); 
if (dr.HasRows) 
{ 
    while (dr.Read()) 
    {        
     dgNames.DataSource = dr["firstName"]; 
     count++      
    }   
}    
sc.Close(); 

답변

1

데이터 소스를 하나의 속성으로 설정할 수 없습니다. 대신 할 수있는 일은 첫 번째 열에 바인딩 된 gridview의 열을 정의한 다음 te Grid의 데이터 소스를 반환 된 개체의 전체 컬렉션으로 설정하는 것입니다.

두 번째로, Datareader를 그리드에 간단히 바인딩 할 수 있습니다. while 루프를 수행 할 필요가 없습니다.

업데이트하는 것은

당신이 많은 레코드가 반환 된 방법을 알고 싶다면
dgNames.AutogenerateColumns=false; 
dgNames.Columns.Add("firstName","firstName"); 
dgNames.DataSource=dr; 

, 단순히 후 바인딩 된 그리드의 행 수를 계산 ... 또는 DataReader를 가진 데이터 테이블을로드하고, Dataable 바인딩 Datareader를 바인딩하는 대신 그리드에 추가합니다. DataTables.Rows.Count는 반환 된 레코드 수를 알려줍니다.

+0

제발 내게 바보주세요. – Tacit

+0

@tacit Winforms 또는 asp.net을 사용하고 있습니까? – Icarus

+0

내가 Winforms를 사용하고있다 – Tacit

0

이것은 MSDN (google 'datagridview')에서 직접 작성한 것으로 상단에 있습니다. 아래쪽으로 스크롤하면 묻는대로 수행하는 방법을 보여주는 샘플 코드가 있습니다. http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.aspx

이카루스 (Icarus)가 말했듯이 - 당신이하려는 것처럼 행 단위로 검사하지 않고 데이터를 바인딩 할 수 있습니다. 당신이 행별로 가고 싶지 않는 경우에, 당신은

... 
dgNames.Rows.Add(dr["firstName"]); 
... 

또한 수 있습니다 - 당신은 당신이 사용하고 같은 while 루프에서의 DataReader를를 증가 할 필요가 없습니다.

+0

메신저가 datareader를 증가시키지 않고, 반환되는 레코드의 수와 위의 라인을 더하여 예외를 던졌습니다. – Tacit

+0

인수가 문자열 배열 일 필요가 있습니다. 위의 링크에서'rows' 속성을 찾아보십시오. 그것에 대해 특별히 이야기합니다 - 어쨌든, 나는 실제로 당신의 코드를 (당신에게서 더 많은 정보없이) 할 수 없기 때문에 내가 할 수있는 최선은 당신에게 대답에 대한 링크를 제공하는 것입니다. MSDN 기사를 확인하십시오. "매뉴얼"이며 그대로 작동하는 예제가 있습니다. 또한 행 수를 원한다면 바인드 된 후 datagridveiw에서 rowcount를 호출 할 수 있습니다.하지만 어쨌든 fwiw입니다. – Chains

+0

감사합니다. 친구입니다. 링크를보고 있습니다. 이해해 주셔서 감사합니다. 많은 도움을 주셔서 감사합니다. – Tacit

관련 문제