2017-10-23 7 views
0

私はSOの多くの回答を読んできましたが、私の問題に対処するための簡単なものは見つかりませんでした。私は単純なDataGridを持っており、チェックボックスの列を追加しました。update mysqlコマンドを送信するDatagridチェックボックスの列

<DataGrid AutoGenerateColumns="False" VirtualizingPanel.IsVirtualizingWhenGrouping="True" EnableColumnVirtualization="True" EnableRowVirtualization="True" VirtualizingPanel.IsVirtualizing="true" ColumnHeaderStyle="{StaticResource lowCase}" x:Name="dtGrid" HorizontalAlignment="Left" CanUserResizeRows="False" ItemsSource="{Binding}" GridLinesVisibility="All" HorizontalContentAlignment="Stretch" CanUserAddRows="false" VerticalAlignment="Top"> 
    <DataGrid.Columns> 
     <DataGridCheckBoxColumn Header="Audited"></DataGridCheckBoxColumn> 
     <DataGridTextColumn Binding="{Binding Location}" Header="Location" Visibility="Collapsed"/> 
     <DataGridTextColumn Binding="{Binding Date, StringFormat=MM-dd-yy}" Header="Date"/> 
     <DataGridTextColumn Binding="{Binding RegularPaidHours}" Header="Regular Repair Hours"/> 
    </DataGrid.Columns> 
</DataGrid> 

私の目標は、行が監査対象としてチェックされるたびに更新コマンドを送信することです。

MySqlCommand cmd = new MySqlCommand("update MyTable set Location='" + Location + "',Date='" + Date + "',RegularPaidHours='" + RegularPaidHours + "', Audited '"yes" where ID = txt.id' , connection); 

誰かが行をチェックすると、その行はdbで更新されます。単にそれがnullでない場合。誰かが私にこれを手助けしてくれますか?私は本当にここで私の最高のオプションが何かを知りません。

答えて

1

バインドにビューモデルに列を適切なパラメータを持つRelayCommand対応する定義:

<DataGridCheckBoxColumn Header="Audited" Binding="{Binding IsAudited, UpdateSourceTrigger=PropertyChanged}" /> 

...あなたが物件のセッターで何でもしてください:

private bool _isAuditing; 
public bool IsAuditing 
{ 
    get { return _isAuditing; } 
    set 
    { 
     _isAuditing = value; 
     //invoke a command or call a method that updates the DB from here... 
     Task.Run(() => { UpdateDb(Location, ...) }); 
    } 
} 

コードの後ろにsqlを使用して更新コマンドを送信できますか?私はいくつかのコードビハインドでそれを行うことを探しています。

その後、DataGridTemplateColumnDataGridCheckBoxColumnを交換し、テンプレートでCheckBoxためCheckedUncheckedイベントを処理する必要があります

<DataGridTemplateColumn Header="Audited" > 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <CheckBox Checked="DataGridCheckBoxColumn_Checked" Unchecked="DataGridCheckBoxColumn_Unchecked" 
             IsChecked="{Binding IsAudited, UpdateSourceTrigger=PropertyChanged}"/> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
    <DataGridTemplateColumn.CellEditingTemplate> 
     <DataTemplate> 
      <CheckBox Checked="DataGridCheckBoxColumn_Checked" Unchecked="DataGridCheckBoxColumn_Unchecked" 
             IsChecked="{Binding IsAudited, UpdateSourceTrigger=PropertyChanged}"/> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellEditingTemplate> 
</DataGridTemplateColumn> 

private void DataGridCheckBoxColumn_Checked(object sender, RoutedEventArgs e) 
{ 
    CheckBox checkBox = sender as CheckBox; 
    var model = checkBox.DataContext as YourClass; 

    //update the DB using the properties of your model... 

} 
+0

このプロジェクトではMVVMまたはEFを使用していません。コードの中でsqlを使ってupdateコマンドを送ることができますか? INotifyPropertyChangedを実装する必要がありますか?私はいくつかのコードビハインドでそれを行うことを探しています。 – iCosmin

+1

MVVMを使用しているかどうかは関係ありません。あなたはまだセッターであなたが望むものを何でもすることができます。しかし私の編集を参照してください。 – mm8

+0

これはまさに私が探していたものです!あなたには本当にありがとうございます。私はあなたに助けてくれてありがとう! "YourClass"とは何ですか? (YourClassとしてのcheckBox.DataContext;)提案をお願いしますか? – iCosmin

1
<DataGrid AutoGenerateColumns="False" VirtualizingPanel.IsVirtualizingWhenGrouping="True" EnableColumnVirtualization="True" EnableRowVirtualization="True" VirtualizingPanel.IsVirtualizing="true" ColumnHeaderStyle="{StaticResource lowCase}" x:Name="dtGrid" HorizontalAlignment="Left" CanUserResizeRows="False" ItemsSource="{Binding}" GridLinesVisibility="All" HorizontalContentAlignment="Stretch" CanUserAddRows="false" VerticalAlignment="Top"> 
    <DataGrid.Columns> 
     <DataGridTemplateColumn Header="Audited"> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <CheckBox Command="{Here your command. Most Probably Relative Source Binding}" CommandParameter="{Binding}"></CheckBox> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
     <DataGridTextColumn Binding="{Binding Location}" Header="Location" Visibility="Collapsed"/> 
     <DataGridTextColumn Binding="{Binding Date, StringFormat=MM-dd-yy}" Header="Date"/> 
     <DataGridTextColumn Binding="{Binding RegularPaidHours}" Header="Regular Repair Hours"/> 
    </DataGrid.Columns> 
</DataGrid> 

そしてLocationは、DateRegularPaidHoursプロパティが既に定義されているクラスのソースプロパティに

+0

私はビューモデルを使用していません。コードビハインドでどうすればいいですか?ありがとう。 – iCosmin

+1

MVVMを使用すれば、将来の問題からあなたを救うことができますか?後ろのコードでは、DataGridRowで直接作業することができます。選択したイベント – Ramankingdom

関連する問題