Datarow作为DataGridView的数据源

时间:2018-12-09 22:00:51

标签: c# winforms datarow

public partial class Oef455 : Form
{
    dtsOef444 dtsOrders = new dtsOef444();
    dtsOef444TableAdapters.tblOrderinformatieTableAdapter TAOrderInfo = new dtsOef444TableAdapters.tblOrderinformatieTableAdapter();
    dtsOef444TableAdapters.tblOrdersTableAdapter TAOrders = new dtsOef444TableAdapters.tblOrdersTableAdapter();
    public Oef455()
    {
        InitializeComponent();
    }

    private void cbOrderID_SelectedIndexChanged(object sender, EventArgs e)
    {
        dataGridView1.DataSource = null;
        int OrderID = int.Parse(cbOrderID.SelectedValue.ToString());
        DataRow drOrders = dtsOrders.tblOrders.FindByOrderID(OrderID);
        dataGridView1.DataSource = drOrders;
    }

    private void Oef455_Load(object sender, EventArgs e)
    {
        TAOrderInfo.Fill(dtsOrders.tblOrderinformatie);
        TAOrders.Fill(dtsOrders.tblOrders);
        cbOrderID.ValueMember = "OrderID";
        cbOrderID.DisplayMember = "OrderID";
        cbOrderID.DataSource = dtsOrders.tblOrders;
    }
}

嗨,我想在DataGridView中显示具有选定OrderID(在组合框中可以选择)的所有Order,有人可以帮我吗?因为当我在组合框中选择一个订单时,DataGridView不会改变...

2 个答案:

答案 0 :(得分:2)

private void cbOrderID_SelectedIndexChanged(object sender, EventArgs e)
{
    dataGridView1.DataSource = null;
    int OrderID = int.Parse(cbOrderID.SelectedValue.ToString());
    DataRow drOrders = dtsOrders.tblOrders.FindByOrderID(OrderID);
    dataGridView1.DataSource = drOrders;
}

我假设您正在使用TableAdapter来填充DataGridView
请尝试将.Fill与过滤后的表格一起使用。

private void cbOrderID_SelectedIndexChanged(object sender, EventArgs e)
{
    if (cbOrderID.SelectedValue != null){
        int OrderID = int.Parse(cbOrderID.SelectedValue.ToString());
        TAOrders.Fill(dtsOrders.tblOrders.FindByOrderID(OrderID));
    }
}

也许您为此TableAdapter还具有其他.Fill()功能。

另一种方法

尝试.DefaultView.RowFilter,这将过滤而无需重新查询数据源。 StackOverflow - Filtering DataGridView without changing datasource

(dataGridViewFields.DataSource as DataTable).DefaultView.RowFilter = string.Format("Field = '{0}'", textBoxFilter.Text);

答案 1 :(得分:0)

这是一种基于ComboBox的选定项更改DataGridView数据源的方法。

private void cbOrderID_SelectedIndexChanged(object sender, EventArgs e)
{
    ComboBox combo = (sender as ComboBox);
    DataRowView selectedItem = (combo.SelectedItem as DataRowView);
    this.BindGrid(selectedItem);
}
private void BindGrid(DataRowView comboItem)
{
    int OrderID = (int)comboItem.Row["OrderID"];
    DataView view = new DataView(OrdersTable());
    view.RowFilter = string.Format("OrderID = {0}", OrderID);
    this.dataGridView1.DataSource = view;
}