2013-02-05 44 views
0

現狀:綁定的BindingList <string[]>到datagridview的

我試圖綁定從LINQ構造SQL查詢到DataGridView一個BindingList<string[]>

問題:

我既不能進行修改的DataGridView產生之後的項目 - 或 - 我收到了一堆不需要的字段的在我的DataGridView(這取決於我使用的我的代碼迭代)我用Google搜索盡我所能,努力實施我在網上找到的大部分解決方案都無濟於事。

我知道,串有其實際價值沒有公共財產。我很難確定如何檢索(我相信是問題的一部分)。

C#

int item = (from p in CurrentConversion.Companies[lbCompanies.SelectedIndex].Modules 
    where p.ModuleName.Equals(clbModules.SelectedItem) 
    select p.ModuleId) 
    .FirstOrDefault(); 

BindingList<string[]> Data = new BindingList<string[]>((
    from p in CurrentConversion.Companies[lbCompanies.SelectedIndex].QuestionAnswers 
    where p[2].Equals(item) 
    select new string[] { p[0].ToString(), p[3].ToString() }) 
    .ToList()); 

dgvQuestions.DataSource = Data; 
dgvQuestions.Refresh(); 

不必要的行爲:

出現這種情況後綁定

datagridview

問:

  1. 這究竟是爲什麼?
  2. 我該如何解決?

附加信息:

我不知道可能需要什麼額外的信息,但我會提供要求什麼。

另外,如果我切換到我的其他代碼迭代:

int item = (from p in CurrentConversion.Companies[lbCompanies.SelectedIndex].Modules where p.ModuleName.Equals(clbModules.SelectedItem) select p.ModuleId).FirstOrDefault(); 
      var Data = new BindingList<object>((from p in CurrentConversion.Companies[lbCompanies.SelectedIndex].QuestionAnswers where p[2].Equals(item) select new {Question = p[0].ToString(), Answer = p[3].ToString() }).Cast<object>().ToList()); 
      dgvQuestions.DataSource = Data; 
      dgvQuestions.Refresh(); 
      dgvQuestions.Columns[1].ReadOnly = false; 

我可以正確地看到數據,但我不能編輯我想列。

回答

1

您綁定到字符串數組列表,你所得到的性能形成陣列。最有可能你想要的東西,像下面這樣:

var Data = new BindingList<object>((
    from p in CurrentConversion.Companies[lbCompanies.SelectedIndex].QuestionAnswers 
    where p[2].Equals(item) 
    select new { 
       Val1 = p[0].ToString(), 
       Val2 = p[3].ToString() 
       }).ToList()); 
+0

也許如果你而不是對象創建你自己的類並使用它。 – Magnus

0

你看到在網格這些領域的原因是,你每行綁定到一個string[]。所以它會自動顯示string[]的屬性作爲列。網格沒有內置邏輯來解析數組,並將數組的內容用作列。

爲了使DataGrid正確顯示您的數據,您應該將其綁定到自定義類型,並且它將使用該類型的公共屬性作爲列。

相關問題