2012-01-26 21 views
1

私はWPFで新しく、SQLクエリからWPF DataGridにデータを視覚化したいと思います。 私は正確にデータをバインドする方法に問題があります、試して、新しいアイテムを追加するときWPFにデータを動的に追加する方法DataGrid

SqlCommand cmd = new SqlCommand(sql_dotaz, conn); 
InfoText.Text += ("Příkaz vytvořen a připojen" + "\n"); 

try 
{ 
    conn.Open(); 
    InfoText.Text += ("Připojení otevřeno" + "\n"); 

    SqlDataReader reader = cmd.ExecuteReader(); 

    int row_count = reader.FieldCount; 
    ArrayList propoj = new ArrayList(); 

    for (int i = 0; i < row_count; i++) 
    { 
     propoj.Add(reader.GetName(i)); 
     tabView.Columns.Add(new DataGridTextColumn 
      { 
       Header = reader.GetName(i), 
       Binding = new Binding(reader.GetName(i)) 
      }); 

     //Here is the problem!!! 
     tabView.Items.Add(new {propoj[i] = "Hello"}); 
    } 

問題がある、それはエラーがスローされます。私はこのようなヘッダー名を明示的に設定できません(Invitation = "Hello")。

I also tried 

tabView.Columns.Add(new DataGridTextColumn 
    { 
     Header = reader.GetName(i), 
     Binding = new Binding(reader.GetName(i)) 
    }); 

string record = reader.GetName(i)); 
tabView.Items.Add(new {record = "Hello"}); 

ただし、ヘッダー名に問題はあります。DataGridは空です。

ご意見がありましたら教えてください。 ありがとう!

+0

こんにちはVilem罰金:-)仕事it's、SOおよびWPFの広い世界へようこそ。データグリッドWPFコントロールに直接データを追加することはできますが、データがユーザーに表示されることを確認するための推奨された方法ではなく、エラーが発生しやすく、不便です。私はあなたが 'MVVMデザインパターン'の例を探して、ViewModelに 'View'を' Data Binding'で習熟させることを推奨しています – EtherDragon

答えて

0

私は解決策を見つけました。多分それは最高ではないが、それは仕事だ。 私はデータセットとSQLアダプタ

adapter.Fill(dSet); 
this.DataContext = dSet.Tables[0].DefaultView; 

とXAMLでの作成:

<DataGrid Height="Auto" Width="Auto" Name="tabView3" ItemsSource="{Binding}" /> 

そして今は

0

タグでWPFのような技術を指定したので、DataBindingでこれを管理する必要があります。

例リンク:すべての

Link1

Link 2

Link 3

1

まず、私は匿名型が結合して動作するとは思いません。あなた何とかそのためのラッパーオブジェクトを作成する必要があります:それと

// easiest case 
public class DatabaseObject 
{ 
    public List<string> Items = new List<string>(); 
} 

を、簡単にあなたの列を生成することができます。

// this should be renamed in something like columns or fieldCount... 
int row_count = reader.FieldCount; 

for (int i = 0; i < row_count; i++) 
{ 
    tabView.Columns.Add(new DataGridTextColumn 
     { 
      Header = reader.GetName(i), 
      Binding = new Binding("Items[i]") 
     }); 
} 

そして、あなたのデータグリッドを埋める:

if(reader.HasRows) 
{ 
    do 
    { 
     DatabaseObject obj = new DatabaseObject(); 
     for (int i = 0; i < row_count; i++) 
     { 
      obj.Items.Add(reader.GetString(i)); 
     } 

     tabView.Items.Add(obj); 
    } 
    while(reader.NextResult()); 
} 
+0

アドバイスをいただきありがとうございます。私の未熟さが原因です。 – VilemRousi

0

場合簡単な方法をしたい:

  1. あなたのデータ。
  2. 単純にデータグリッドからデータテーブルへのアイテムソースをバインドします。

    <DataGrid ItemsSource="{Binding MyFilledDataTableProperty}" />

  3. は、右のDataContextを設定する(データバインディングとMVVMについての記事を読みます)。

関連する問題