【问题标题】:How to fix sending data from new instance of form to datagrid on Main Form如何修复从表单的新实例向主表单上的数据网格发送数据
【发布时间】:2019-08-24 06:47:13
【问题描述】:

前几天,我在 WPF 中有一个简单的库存管理器,它使用连接到表的数据网格使用 SQL 工作,但更改了一行代码,现在它坏了。自从我打破它以来我一直在睡觉,无法弄清楚如何再次修复它。

问题似乎出在下面 MainWindow 类中的 dataGrid1.Items.Add(testtables) 上。

我在 trycatch 中运行它,异常消息指出在使用 ItemsSource 时操作无效,而应该使用 ItemsControl.ItemsSource 来访问和修改元素。

这是主窗体的代码

namespace WpfApp2
{

    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {

        DataClasses1DataContext dc = new DataClasses1DataContext(Properties.Settings.Default.TestingConnectionString);

        public MainWindow()
        {
            InitializeComponent();
            if (dc.DatabaseExists())
            {
                dataGrid1.ItemsSource = dc.TestTables;
            }
        }

        private void newButton_Click(object sender, RoutedEventArgs e)
        {
            Window1 window1 = new Window1();
            window1.Show();
        }

        public void NewLine (int ID, string nm, decimal pc)
        {
            TestTable testtable = new TestTable
            {
                ID = ID,
                Name = nm,
                Price = pc
            };

            dataGrid1.Items.Add(testtable);

        }

        private void saveButton_Click_1(object sender, RoutedEventArgs e)
        {
            dc.SubmitChanges();
        }

    }
}

MainWindow 的 XAML 代码

<Window x:Class="WpfApp2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp2"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Button x:Name="newBtn" Content="New" HorizontalAlignment="Left" Margin="217,62,0,0" VerticalAlignment="Top" Width="75" Click="newButton_Click"/>
        <Button x:Name="save" Content="Save" HorizontalAlignment="Left" Margin="401,82,0,0" VerticalAlignment="Top" Width="75" Click="saveButton_Click_1"/>
        <DataGrid x:Name="dataGrid1" HorizontalAlignment="Left" Height="100" Margin="77,236,0,0" VerticalAlignment="Top" Width="575" IsReadOnly="True"/>

    </Grid>
</Window>

这是要求用户输入数据的辅助表单的代码

public partial class Window1 : Window
    {
        public int iDNumber;
        public string name;
        public decimal price;

        public Window1()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            iDNumber = Convert.ToInt32(iDTextBox.Text);
            name = Convert.ToString(nameTextBox.Text);
            price = Convert.ToDecimal(priceTextBox.Text);
            ((MainWindow)Application.Current.MainWindow).NewLine(iDNumber, name, price);
            this.Close();
        }
    }

Window1 的 XAML 代码

<Window x:Class="WpfApp2.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp2"
        mc:Ignorable="d"
        Title="Window1" Height="450" Width="400">
    <Grid Margin="0,0,0,0">
        <Button Content="Save" HorizontalAlignment="Left" Margin="156,362,0,0" VerticalAlignment="Top" Width="76" Click="Button_Click"/>
        <TextBox x:Name="iDTextBox" HorizontalAlignment="Left" Height="23" Margin="156,79,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>
        <TextBox x:Name="nameTextBox" HorizontalAlignment="Left" Height="23" Margin="156,117,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>
        <TextBox x:Name="priceTextBox" HorizontalAlignment="Left" Height="23" Margin="156,155,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>
        <Label Content="ID" HorizontalAlignment="Left" Margin="95,79,0,0" VerticalAlignment="Top"/>
        <Label Content="Name" HorizontalAlignment="Left" Margin="95,117,0,0" VerticalAlignment="Top"/>
        <Label Content="Price" HorizontalAlignment="Left" Margin="95,155,0,0" VerticalAlignment="Top"/>

    </Grid>
</Window>

前几天它工作时,它很好地将新的数据行添加到 SQL 数据库中(但是没有自动在应用程序中显示更新的信息,但目前这不是问题)。

【问题讨论】:

  • 您能否也为上面的 DataGrid 发布您的 XAML 代码?
  • @EliHellmer XAML 代码现已添加!

标签: c# sql wpf datagrid


【解决方案1】:

在这部分代码中:

  public MainWindow()
    {
        InitializeComponent();
        if (dc.DatabaseExists())
        {
            dataGrid1.ItemsSource = dc.TestTables;
        }
    }

您通过将数据表分配给 datagrid.ItemsSource 属性来显示数据。如果这样做,则需要通过修改 DataTable 而不是 DataGrid 来添加项目。

dataGrid1.Items.Add(testtable);

因此,请尝试将 testtable 项添加到您现有的集合 dc.TestTables 中,而不是上面的内容

【讨论】:

  • 我已将代码 dataGrid1.Items.Add(testtable); 更改为 dc.TestTables.InsertOnSubmit(testtable); dc.SubmitChanges(); 并且似乎有效。我不认为这是前几天的情况,但它现在正在工作。谢谢!
猜你喜欢
  • 2021-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-22
  • 2018-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多