在WPF C#中将单个项添加到datagrid

时间:2013-10-28 11:18:43

标签: c# wpf visual-studio-2012 datagrid

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

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

我能够将datagrid中的所有值填入数据库。

代码如下。

        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);
        }

我想使用colomn名称“Number,ProductCode,ProductName,Quantity,Tax,Total”自定义我的数据网格,并希望从不同的表中添加单个值。

如何做同样的事。

在下面添加

    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);
        }
    }

2 个答案:

答案 0 :(得分: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);

如果您希望通过 DataTable 中的更改通知 DataGrid ,请设置网格 * ItemsSource *到 DataView dt.DefaultView()

答案 1 :(得分: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。

玩得开心。