2017-08-24 4 views
0

申し訳ありませんが、私はいくつかの助けが必要です。 データテーブルからwpfデータグリッドにデータをロードしようとしています。 は現在、私はこのようにそれをやっている: XAML正しくSQL Server 2016 datatableをwpfデータグリッドに読み込む方法は?

<DataGrid Height="362" Width="auto" Name="grdAngebote" SelectionMode="Single" SelectionUnit="Cell" CanUserResizeColumns="True" CanUserReorderColumns="True" CanUserSortColumns="True"AlternatingRowBackground="LightGray" AlternationCount="2" RowEditEnding="grdAngebote_RowEditEnding"/> 

CS

private void fillDatagrid() 
     { 
      sqlQuery = string.Empty; 
      using (sqlcon = new SqlConnection(sqlConString)) 
      { 
       sqlQuery = "Select ID, Angebotsnummer, Kundenname, Bauvorhaben, KundenstatusID as 'Kundenstatus', AquisekanalID as 'Aquisekanal', Ansprechpartner, AusführungszeitraumID as 'Ausführungszeitraum/Quartal', Auftragssumme, Zuschlagswahrscheinlichkeit as '%', KalkSumme, AngebotsstatusID as 'Angebotsstatus', Absagegrund From Angebote;"; 
       sqlcmd = new SqlCommand(sqlQuery, sqlcon); 
       sqlda = new SqlDataAdapter(sqlcmd); 
       dt = new DataTable("Angebote"); 
       sqlda.Fill(dt); 
       grdAngebote.ItemsSource = dt.DefaultView; 
       string sum; 
       sum = getSum(); 
       sqlcon.Close(); 
       Summe.Content = sum; 
      } 
     } 

いくつかの追加情報:これは私のためではなく、インターネットの私のすべての例で動作し

private SqlConnection sqlcon; 
private SqlCommand sqlcmd; 
private SqlDataAdapter sqlda; 
private DataTable dt; 

をグリッドの一部のデータが変更されたかどうかを確認するために{Binding ...}を使用することを確認してください。セルからデータを変更し、これをSQL Serverデータベースに更新します。 私は私のプログラムを更新したいと思いますし、バインディングも使用しますがどうしますか?

私はあらゆる種類のヘルプやヒントに感謝します。 おかげさまで、ありがとうございました!

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     DataContext = new Window31ViewModel(); 
    } 
} 

public class ViewModel 
{ 
    public ViewModel() 
    { 
     fill(); 
    } 

    private void fill() 
    { 
     sqlQuery = string.Empty; 
     using (sqlcon = new SqlConnection(sqlConString)) 
     { 
      sqlQuery = "Select ID, Angebotsnummer, Kundenname, Bauvorhaben, KundenstatusID as 'Kundenstatus', AquisekanalID as 'Aquisekanal', Ansprechpartner, AusführungszeitraumID as 'Ausführungszeitraum/Quartal', Auftragssumme, Zuschlagswahrscheinlichkeit as '%', KalkSumme, AngebotsstatusID as 'Angebotsstatus', Absagegrund From Angebote;"; 
      sqlcmd = new SqlCommand(sqlQuery, sqlcon); 
      sqlda = new SqlDataAdapter(sqlcmd); 
      dt = new DataTable("Angebote"); 
      sqlda.Fill(dt); 
      DataView = dt.DefaultView; 

      string sum; 
      Sum = getSum(); 
      sqlcon.Close(); 
     } 
    } 

    public DataView DataView { get; private set; } 
    public string Sum { get; private set; } 
} 

は、ビューモデルクラスのインスタンスにあなたの窓のDataContextを設定します。

+0

非常に大きな対象をカバーする。 relayコマンドを見てみましょう:http://www.c-sharpcorner.com/UploadFile/20c06b/icommand-and-relaycommand-in-wpf/あなたが話しているバインディングは、プロパティへのバインディングです。必要に応じて処理します。 – Leonidas199x

+0

オブジェクトにItemSourceまたはDataSourceプロパティがある場合、バインドする必要はありません。 – jdweng

+0

すばらしい回答をいただきありがとうございました!私はこの話題がかなり大きいことを知っています。もし私がバインディングを必要としないのであれば、私はどのように変更値を得ることができますか? Roweditendingイベントの後に?私はこのようにしてみました:if(e.EditAction == DataGridEditAction.Commit) { Angebot a = new Angebot(); a = e.Row.Item as Angebot; if(a!= null) { MessageBox.Show(a.Kundenname); } }私のオブジェクトは常にNULLなので何かが見つからないのですか? –

答えて

1

を初期化し、あなたがにバインドするデータを公開するビューモデルクラスを作成します。

XAMLのビューモデルのプロパティにバインド:

<DataGrid Name="grdAngebote" ItemsSource="{Binding DataView} " .../> 
... 
<Label x:Name="Summe" Content="{Binding Sum}" /> 
関連する問題