#c# #wpf
#c# #wpf
Вопрос:
в deigner я задаю команду обновления tableadapter следующим образом, после использования tableadpater update в событии button она не обновляется, как обновить в WPF?
Я добавил цикл для обновления набора данных вручную и обеспечения обновления набора данных с помощью messagebox.show однако после повторного использования dataadapter.update присваивания datacontext результат не меняется, означает, что база данных не обновляется
UPDATE Food
SET Home =@Home
WHERE Name=@Name
<local:Food_DataSet x:Key="Food_DataSet" />
</Window.Resources>
<Grid VerticalAlignment="Top" Height="300">
<Grid.ColumnDefinitions>
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="150"/>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Menu Grid.Row="0" Height="20" VerticalAlignment="Top">
<MenuItem Header="Archivo" Background="Wheat" Name="MenuItem1" >
<MenuItem Name="mi1" Style="{StaticResource Triggers}" Header="_Nuevo" />
<MenuItem Name="mi2" Style="{StaticResource Triggers}" Header="_Abrir" />
<MenuItem Name="mi3" Style="{StaticResource Triggers}" Header="_Salir"/>
</MenuItem>
</Menu>
<ListView Grid.Row="1"
Name="listView"
Margin="5,5,5,5"
ItemsSource="{Binding Mode=OneWay}"
ItemContainerStyle="{DynamicResource myItemContainerStyle}"
ItemsPanel="{DynamicResource ItemsPanelTemplate1}"
GridViewColumnHeader.Click="GridViewColumnHeaderClickedHandler">
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding Name}"
Header="{Binding Path=Columns[Name], Converter={StaticResource columnHeaderConverter}}"/>
<GridViewColumn Header="{Binding Path=Columns[Home], Converter={StaticResource columnHeaderConverter}}">
<GridViewColumn.CellTemplate>
<DataTemplate>
<lib:EditBox
BorderThickness="0"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
Value="{Binding Home, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
...
private WordProcess.Food_DataSetTableAdapters.FoodTableAdapter foodTableAdapter;
private WordProcess.Food_DataSet FoodDataSet;
public Window1()
{
InitializeComponent();
this.WindowStartupLocation = WindowStartupLocation.CenterScreen;
DataContext = (new FoodTableAdapter()).GetData();
FoodDataSet = ((WordProcess.Food_DataSet)(this.FindResource("Food_DataSet")));
foodTableAdapter = new WordProcess.Food_DataSetTableAdapters.FoodTableAdapter();
//foodTableAdapter.Fill(FoodDataSet.Food);
}
private void word_button_Click(object sender, RoutedEventArgs e)
{
MessageBoxResult objResult = MessageBox.Show("Are You sure You want to save", "Save Confirmation", MessageBoxButton.YesNo);
if(objResult == MessageBoxResult.Yes)
{
for (int i = 0; i < FoodDataSet.Food.Count; i )
{
for(int j=0; j<listView.Items.Count; j )
{
DataRowView Home = (DataRowView)listView.Items[j];
FoodDataSet.Food[i].Home = Home.Row[1].ToString();
}
}
FoodDataSet.AcceptChanges();
MessageBox.Show(FoodDataSet.Food[0].Home);
try
{
foodTableAdapter.Update(FoodDataSet.Food);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
DataContext = foodTableAdapter.GetData();
}
Комментарии:
1. как обновить базу данных через tableadpater в WPF? это как сравнивать яблоки и груши. есть 2 вопроса: 1.my в наборе данных есть изменения, которые не сохраняются в базе данных через dataadapter.update(). 2.my набор данных не отражает изменения в пользовательском интерфейсе wpf или наоборот. пожалуйста, укажите вашу проблему
2. Что обычно делается при привязке listview к базе данных, которая может сохраняться в базе данных?
Ответ №1:
Это не удивительно. В начале вы устанавливаете: FoodDataSet.AcceptChanges(); «Когда вы вызываете AcceptChanges для набора данных, все объекты DataRow, все еще находящиеся в режиме редактирования, успешно завершают свои изменения. Свойство RowState каждого DataRow также изменяется; Добавленные и измененные строки становятся неизменными, а удаленные строки удаляются.»
И затем вы пытаетесь: foodTableAdapter.Обновление(FoodDataSet.Food); После AcceptChanges() сохранять в БД нечего.
Комментарии:
1. Что обычно делается при привязке listview к базе данных, которая может сохраняться в базе данных?
2. Уильям, если ты используешь WPF4 — используй DataGrid. По сути, ListView с GridView — это сетка данных для бедных.