2014-02-12 81 views
0

我想附加一個SQL查詢的結果到一個gridview沒有創建一個集合,而是使用SQLdataAdapter。c#SQLDATAadapter與GridView的問題

DataTable dt = new DataTable(); 
      using (SqlCommand cm = cn.CreateCommand()) 
      { 
       StringBuilder ct = new StringBuilder(); 

       ct.AppendLine("SELECT DISTINCT........"); 
       ct.AppendLine("FROM ...... er"); 
       ct.AppendLine("INNER JOIN ....... ev ON er.eKey = ev.eKey"); 
       ct.AppendLine("WHERE UserId ='" + _CurrentUser.UserId + "' AND [Type] = 'R' AND EndDate is NULL"); 
       ct.AppendLine("Order By er.eKey DESC"); 
       Debug.WriteLine(ct.ToString()); 
       cm.CommandType = CommandType.Text; 
       cm.CommandText = ct.ToString(); 
       System.Diagnostics.Debug.WriteLine(ct.ToString()); 
       SqlDataAdapter dr = new SqlDataAdapter(cm); 
       dr.Fill(dt); 
      } 

此前我使用簡單的表格格式來表示我的數據,它工作正常。

 // int i = 0; 
     // foreach (DataRow row in dt.Rows) 
     // { 
     //  if (i++ == 0) 
     //   Response.Write("<span class='style5'><strong><span class='style6'><center>Existing Enrollments:</center><br/><br/></span></strong></span><table><tr><th>Enroll Key<br/></th><th>Name<br/><br/></th><th>DBA<br/><br/></th><th>Address<br/><br/></th><th>City<br/><br/></th><th>State<br/><br/></th><th>Zip<br/><br/></th><th>TIN<br/><br/></th><th>UserID<br/><br/></th></tr>"); 
     //  Response.Write("<tr>"); 
     //  foreach (DataColumn column in dt.Columns) 
     //  { 
     //   Response.Write("<td>" + row[column].ToString() + "</td>"); 
     //  } 

現在,我想這個方法: -

gvwERAenrollments.DataSource = dt;; 

,並給我一個空的GridView。

我參考: - http://csharp.net-informations.com/dataadapter/datagridview-sqlserver.htm

誰能幫助我?查詢將返回多行。

回答

1

我將數據表直接分配給gridview: gvwEnrollments.DataSource = dt;

由於這不是從sql查詢返回的數據集,直接將結果表分配給gridview應該可以工作。

+0

我意識到,我改變了這一切很快,但是我的GridView顯示了沒有記錄......不過以前我用一個簡單的表和工作。 – Philo

+0

我會懷疑sql查詢沒有返回任何行,然後。把你的dt放在Watch中,DataSource賦值的斷點,然後檢查dt的行數。然後你會知道你的dt是否真的從數據庫中獲取值。 – Brinky

+0

呵呵,這很奇怪,用我的初始表格方法,我得到的所有值都按照預期填充,但是使用dt我得到了一個{}集合。 – Philo

0

你定義爲dt的一個DataTable

DataTable dt = new DataTable(); 

或許它應該是一個DataSet?

或..只是使用gvwEnrollments.DataSource = dt;

+0

是的,我試過DataSet和直接分配。但我的gridview顯示爲空。我更新了我的問題。 – Philo

+0

如果您有SSMS,請使用Debug.WriteLine(ct。的ToString());並粘貼到SSMS中 - 查看是否得到結果,刪除where子句 - 檢查是否有結果,重新添加where子句,直到找到排除所有結果的部分。 –

0

表是不是數據表的屬性,但它是DataSet的一個屬性。此外,DataSource可能需要更新,除非在實際獲取數據之前設置控件的數據源。

你可以嘗試:

DataSet ds = new DataSet(); 
ds.Tables.Add(dt); 
gvwEnrollments.DataSource=ds; 
+0

我仍然得到一個空的gridview ... – Philo