2014-06-06 95 views
0

目前我的問題是,當我運行代碼時,它顯示了一個數據網格,其名稱爲Forename而不是Forename本身的length。任何人有任何線索,似乎很愚蠢。DBReader提供字符串的長度而不是字符串

List<string> NameList = new List<string>(); 
string connectionString = "Server = localhost; Database = TestDb; Trusted_Connection = True;"; 
try 
    { 
    IDbConnection dbcon; 
    using (dbcon = new SqlConnection(connectionString)) 
    { 
     dbcon.Open(); 
     using (IDbCommand dbcmd = dbcon.CreateCommand()) 
     { 
      string sql = "Select * from people"; 
      dbcmd.CommandText = sql; 
      using (IDataReader reader = dbcmd.ExecuteReader()) 
      { 
       while (reader.Read()) 
       { 
        string FirstName = (string) reader["ForeName"]; 
        NameList.Add(FirstName); 
       } 
       DataGrid1.ItemsSource = NameList.ToList(); 
       reader.Close(); 
       dbcon.Close(); 
      } 
     } 
    } 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.ToString()); 
} 
+1

當你調試代碼,假設你正在使用的調試器; 'NameList [0]'的值是什麼也不需要調用'DataGrid1.DataBind()';之前讀者。關閉() – MethodMan

+0

NameList [0] =「沙龍」 – Master

+0

你熟悉'BindingList'還有另一種方法,你可以做到這一點,你可以創建一個類與自動屬性匹配你想要的字段名稱..加載BindingList,然後將DataGrid1.DataSource =分配給該BindingList非常簡單,我一直都在使用它..親自我會重構你的代碼,創建一個存儲過程並將數據返回到DataSet或DataTable中,並以此方式綁定它。你試圖在dataGrid上顯示多少列? – MethodMan

回答

2

更改List<string>到類似下面

IList<string> NameList = new List<string>(); 
DataGrid1.DataSource = NameList.Select(s => new 
         { 
          Value = s 
         }).ToList(); 

東西沿着這些路線以下不傷害嘗試

+0

工作完美,有沒有辦法避免linq表達?只是出於好奇。再次感謝你。 – Master

+1

有很多方法可以說皮膚貓......如果你不熟悉使用linq ..我只是將我的datagrid綁定到DataTable或DataSet,如果你使用EF,你仍然可以綁定數據列表嘗試谷歌不同的方式將數據綁定到DataGrid或DataGridView – MethodMan

+0

很高興我可以爲您提供一個替代解決方案 – MethodMan