ネット 4 wpf c# プロジェクトでデータグリッド コントロールのバインディングに問題があります
これは私が持っているものです。
1.dgCSVData と呼ばれるデータグリッド コントロールで、列の自動生成がチェックされています。
私のxamlは
<DataGrid ItemsSource="{Binding dgCSVData}" Name="dgCSVData" Height="283" Width="1033" IsEnabled="True" ContextMenuService.ShowOnDisabled="True" IsReadOnly="True" SelectionChanged="dgCSVData_SelectionChanged" >
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem Command="Copy">
<!--<MenuItem.Icon>
<Image Source="Images/copy.png" />
</MenuItem.Icon>-->
</MenuItem>
</ContextMenu>
</DataGrid.ContextMenu>
</DataGrid>
- csv をリストに読み込み、そのリストを使用して、SQL データベースから複製されたデータテーブルを作成しています。データテーブルはバックグラウンド リーダーで作成され、メイン スレッドに返されます。テーブルのデータ行の項目を循環させ、データテーブルが正しい情報で返されることを確認しました。これは、デバッグから出力されたテーブルの 1 つの行です。
年項目: 2013/14、項目から: 12/10/2013 00:00:00、項目へ: 18/10/2013 00:00:00、週番号項目: 27、時計番号項目: 1139、名前項目: SINGH,初期項目: R,部門項目: 1,自時間項目: 55.50,その他の時間項目: 0.00,総時間項目: 55.50,O/T プレミアム項目: 7.92
このコードでデータグリッドのコンテンツを設定します(または設定しようとします)
void objProgress_ValueChanged(DataTable Result,string msg)
{
//Handle the event of csv datatable ready to return
oTable = Result;
//this is just for debug
DataRow Dr = oTable.Rows[0];
foreach (var item in Dr.ItemArray)
{
System.Windows.Forms.MessageBox.Show(item.ToString());
}
//this meant to set the binding BUT DOES NOT WORK TOTALLY LAST COLUMN MISSING
this.dgCSVData.DataContext = oTable.DefaultView;
this.dgCSVData.ItemsSource = oTable.DefaultView;
tbLoadDgStat.Visibility = Visibility.Visible;
//This does some error checking
if (oTable.Rows.Count > 1)
{
if (msg.Trim().StartsWith("Warning"))
{
System.Windows.Media.Color c = Colors.Red;
this.tbLoadDgStat.Background = new SolidColorBrush(c);
System.Windows.Forms.MessageBox.Show(oTable.Rows.Count.ToString());
}
this.tbLoadDgStat.Text = msg;
progressBar1.Value = 100;
btUpload.IsEnabled = true;
}
else
{
this.tbdgImport.Text = "Error no data returned";
progressBar1.Value = 50;
}
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default;
progressBar1.Visibility = Visibility.Hidden;
this.Show();
}
私が受け取るエラーは
System.Windows.Data エラー: 40: BindingExpression パス エラー: 'O' プロパティが 'object' ''DataRowView' (HashCode=30297615)' に見つかりません。BindingExpression :Path=O/T プレミアム; DataItem='DataRowView' (HashCode=30297615) ; ターゲット要素は 'TextBlock' (Name='') です。ターゲット プロパティは 'Text' (タイプ 'String') です
パス O/T Premium は、データテーブルとデータグリッドの両方の最後の列です。O/T プレミアム アイテムの値の上の行からのものである必要があります: 7.92データ テーブルから、これは小数ですが、正しくバインドされる前の 4 つのアイテムも同様です
開発の次の段階で別のcsvファイルをデータグリッドに読み込むことを期待しているため、バインディングを可能な限り汎用的にしようとしています
データ テーブルの他のすべての項目が正しく表示され、2 行のコードで実行されるため、バインディングの問題がわかりません。
this.dgCSVData.DataContext = oTable.DefaultView;
this.dgCSVData.ItemsSource = oTable.DefaultView;