2013-03-08 37 views
0

我想仅显示datagridview中的第一个名称。这是我的查询,但它不返回任何内容:在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中定义一个绑定到名字列的列,然后将网格的数据源设置为返回对象的整个集合。其次,您可以简单地将Datareader绑定到网格,不需要执行while循环。

更新

dgNames.AutogenerateColumns=false; 
dgNames.Columns.Add("firstName","firstName"); 
dgNames.DataSource=dr; 

如果你想知道如何返回了多条记录,简单地计算网格中的行后,势必数目...或加载一个DataTable与DataReader和绑定Dataable到网格而不是绑定Datareader。 DataTables.Rows.Count会告诉你有多少记录被返回。

+0

你能给我一个片段请 – Tacit 2013-03-08 19:05:03

+0

@tacit你使用的Winforms或asp.net? – Icarus 2013-03-08 19:05:54

+0

我使用的WinForms – Tacit 2013-03-08 19:07:05

0

这是直接从MSDN(谷歌'datagridview',它是正确的顶部)。滚动到底部,并有示例代码演示如何执行您所要求的操作。 http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.aspx

正如伊卡洛斯所说 - 您可以将数据绑定到数据中,而不需要逐行检查数据,就像您正在尝试的那样。但是,如果你想要去行由行,你可以

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

而且 - 你不需要增加一个DataReader,在一个while循环就像你正在使用。

+0

即时通讯不增加数据读取器即时计算返回多少记录加上面的行会引发异常 – Tacit 2013-03-08 19:17:28

+0

参数可能需要是一个字符串数组 - 查看上面链接处的rows属性,专门谈论它 - 无论如何,我实际上无法为你做你的代码(没有你的更多信息),所以我能做的就是给你链接到答案。查看MSDN文章 - 它是“手册”,并且有一个工作示例。另外 - 你可以在你的datagridveiw上调用rowcount,如果你想要一个rowcount - 你自己,但无论如何,fwiw。 – Chains 2013-03-08 19:24:54

+0

谢谢队友我正在看链接,看看我是否能够理解它,非常感谢您的帮助 – Tacit 2013-03-08 19:27:08

相关问题