0

我有一个表名称为“Product_Master”的数据库,列标题为“ProductID、ProductCode、ProductName、ProductDescription、LandingPrice、SellingPrice、Stock、ProductCategory”。

我的 wpf 窗口中有一个数据网格。

我能够填充数据网格将数据库中的所有值。

代码如下。

        SqlCeCommand com = new SqlCeCommand("SELECT ProductCode FROM Products_Master WHERE ProductName =('" + txtAutoProductName.Text + "') OR ProductCode = ('" + txtProductCode.Text + "')", con);
        try
        {
            SqlCeDataAdapter da = new SqlCeDataAdapter();
            da.SelectCommand = com;
            DataTable dt = new DataTable();
            da.Fill(dt);
            BindingSource bSource = new BindingSource();
            bSource.DataSource = dt;
            dgrdBilling.ItemsSource = bSource;
            da.Update(dt);
        }
        catch (Exception ex)
        {
            System.Windows.Forms.MessageBox.Show(ex.Message, System.Windows.Forms.Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

我想用列名“数字、产品代码、产品名称、数量、税收、总计”自定义我的数据网格,并想从不同的表中添加单个值。

如何做同样的事情。

在下面添加

    private void txtAutoProductName_TextChanged(object sender, EventArgs e)
    {
        SqlCeCommand com = new SqlCeCommand("SELECT * FROM Products_Master WHERE ProductName =('" + txtAutoProductName.Text + "') OR ProductCode = ('" + txtProductCode.Text + "')", con);
        try
        {
            SqlCeDataAdapter da = new SqlCeDataAdapter();
            BindingSource bSource = new BindingSource();
            DataTable dt = new DataTable();
            DataRow newRow = dt.NewRow();
            da.SelectCommand = com;
            da.Fill(dt);
            bSource.DataSource = dt;
            //dgrdBilling.ItemsSource = bSource;
            dgrdBilling.ItemsSource = dt.DefaultView;
            //dgrdBilling.Items.Add(bSource);
            da.Update(dt);
            newRow["ProductName"] = txtAutoProductName.Text;
            newRow["ProductCode"] = bSource;
            dt.Rows.Add(newRow);
        }
        catch (Exception ex)
        {
            System.Windows.Forms.MessageBox.Show(ex.Message, System.Windows.Forms.Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }
4

2 回答 2

1

尝试在您的 .xaml 中进行自定义:

首先设置 AutoGenerateColumns,然后使用适当的绑定添加所需的列。

DataGrid ItemsSource="{Binding Products}" AutoGenerateColumns="False" >
<DataGrid.Columns>
     <DataGridTextColumn Header="Name" Binding="{Binding Path=Column_name_in_table}"/>
</DataGrid.Columns>

这用于在代码隐藏 .xaml.cs 中添加行:

DataRow newRow = dt.NewRow();

newRow["ProductID"] = txtBox1.Text;
newRow["ProductCode"] = txtBox2.Text;
      .
      .
      .

dt.Rows.Add(newRow);

如果您希望DataGrid收到DataTable中的更改通知,请将网格* ItemsSource * 设置为DataViewdt.DefaultView()

于 2013-10-28T11:48:56.817 回答
0

这是一个关于如何使用 DataGrid 的精彩教程。

http://wpftutorial.net/DataGrid.html

如果要定义自定义列,请设置 AutoGenerateColumns="False"。

<DataGrid ItemsSource="{Binding Customers}" AutoGenerateColumns="False" >
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="Image" Width="SizeToCells" IsReadOnly="True">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Image Source="{Binding Image}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

在此示例中,标题名称为 Image。

玩得开心。

于 2013-10-28T11:26:13.873 回答