2012-07-25 52 views
0

我想學習WPF,並試圖用MySQL數據庫中的數據填充WPF DataGrid。相關的代碼是:我該如何轉換DataGrid.ItemsSource賦值給DataTable?

 dataGrid.DataContext = myMySQL.DBDataSet; 
     dataGrid.ItemsSource = myMySQL.DBDataSet.Tables[tblName]; 

dataGrid是一個WPF DataGrid控件。 myMySQL.DBDataSet是一個System.Data.DataSet。在上面的第二行代碼中出現以下錯誤。

「無法隱式轉換類型 'System.Data.DataTable' 到 'System.Collections.IEnumerable'。一個顯式轉換存在(是 缺少強制轉換?)」

是,我可能需要演員。我很高興聽到有明確的轉換存在。但是,我如何確定我需要的是什麼? '(System.Collections.IEnumerable)'顯然不起作用。 'ItemsSource'的類型似乎是'System.Windows.Controls.ItemsControl'。但是強制轉換(System.Windows.Controls.ItemsControl)也不起作用。我不知道在哪裏可以找到解釋如何投射這個DataTable來糾正這個錯誤。你可以幫我嗎?

回答

1

嘗試將DataTable的DefaultView指定給ItemsSource。

dataGrid.ItemsSource = myMySQL.DBDataSet.Tables[tblName].DefaultView; 
+0

更好的...這消除了類型轉換錯誤。我的DataGrid顯示正確的行數,但它們是空的。 – JNygren 2012-07-25 19:04:15

+0

@JNygren讓我看看你定義DataGrid的XAML文件。 – kmatyaszek 2012-07-25 19:06:40

+0

是的,'DefaultView'設置沒有辦法。不是很直觀。非常感謝你。 – JNygren 2012-08-17 20:31:47

1
private DataTable GetNewStaffCode() 
     { 
      Mod_Staff stafmodules = new Mod_Staff(); 
      staffcode = txtStaffCode.Text.ToString(); 
      DataTable dtstaffcode=stafmodules.GetNewStaffCode(staffcode); 
      for (int j = 0; j < dtstaffcode.Rows.Count; j++) 
      { 
       staffcode ="ST"+ Convert.ToString(j); 
      } 

錯誤消息是:

Cannot implicitly convert type 'System.Data.DataTable' to 'string'

而且

Real_Estate_Management_System.StaffEntry.GetNewStaffCode()': not all code paths return a value D:\Shwe Ain Real Estate Management\Real Estate Management By May Mee Tun\Real_Estate_App\Real_Estate_Management_System\Real_Estate_Management_System\UI\StaffEntry.cs 329 30 Real_Estate_Management_System

  txtStaffCode.Refresh(); 
     } 

public DataTable GetNewStaffCode(string staffcode) 
    { 
     String query = "Select staff_code from tblStaffType"; 
     if (CN.State == ConnectionState.Closed) CN.Open(); 
     SqlCommand cmd = new SqlCommand(query, CN); 
     DataTable dt = new DataTable(); 
     SqlDataAdapter adp = new SqlDataAdapter(cmd); 
     adp.Fill(dt); 
     return dt; 
    }