Мне нужно обновить связь между сеткой данных и таблицей БД SQL.Когда я нажимаю на флажки некоторых элементов, отображаемых в сетке данных, мне приходится обновлять всю сетку данных.Все это ... почему?
Потому что, если щелчок для изменения состояния флажка отсутствует на флажке, состояние не изменяется.Для этого я подумал, что, возможно, чтобы упростить задачу, я мог бы обновить запрос SELECT.Это позволяет мне показать таблицу DB в сетке данных.
Так как я могу это сделать?Должен ли я обновить запрос или обновить сетку данных?Вот код флажка:
//CHECKBOX MAINLIST
private void Row_DoubleClick_ex(object sender, MouseButtonEventArgs e)
{
sqliteCon.Open();
if (sqliteCon.State == System.Data.ConnectionState.Open)
{
//PER IDENTIFICARE LA LINEA CORRENTE:
var currentRowIndex = ListTable.Items.IndexOf(ListTable.CurrentItem);
string q = @"UPDATE tabList
SET selection = (
CASE WHEN (SELECT selection
FROM tabList
where idL = @CURRENT) = 0
THEN 1
ELSE 0
END)
WHERE idL = @CURRENT";
// This doesn't work:
CollectionViewSource.GetDefaultView(ListTable.ItemsSource).Refresh();
SqlCommand cmd = new SqlCommand(q, sqliteCon);
currentRowIndex = currentRowIndex + 1;
cmd.Parameters.AddWithValue("@CURRENT", currentRowIndex);
cmd.ExecuteNonQuery();
MessageBox.Show("Item Checked");
}
sqliteCon.Close();
}
CollectionViewSource.GetDefaultView(ListTable.ItemsSource).Refresh();
Я пытался реализовать это, но это не работает.И вот это XAML
<DataGrid AutoGenerateColumns="True" x:Name="ListTable" Binding.SourceUpdated="ListTable_SourceUpdated" Grid.ColumnSpan="2" ColumnWidth="165" Margin="0,0,94,-12.5" >
<DataGrid.ItemContainerStyle>
<Style TargetType="DataGridRow">
<EventSetter Event="MouseDoubleClick" Handler="Row_DoubleClick_ex"/>
</Style>
</DataGrid.ItemContainerStyle>
</DataGrid>
здесь есть запрос
//Primo caricamento tabella dati
try
{
sqliteCon.Open();
string Query = "select tabList.selection,tabList.nomeItem , tabList.resItem from tabList ";
SqlCommand createCommand = new SqlCommand(Query, sqliteCon);
createCommand.ExecuteNonQuery();
SqlDataAdapter dataAdp = new SqlDataAdapter(createCommand);
DataTable dtlb = new DataTable("tabList");
dataAdp.Fill(dtlb);
ListTable.ItemsSource = dtlb.DefaultView;
dataAdp.Update(dtlb);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
sqliteCon.Close();