我的代码有一个奇怪的问题。我目前正在为我的数据网格编写一个过滤器。

每当用户清除文本字段时,就会出现以下错误消息:


  无法将类型为“ System.Windows.Forms.BindingSource”的对象转换为
  键入“ System.Data.DataTable”。


到目前为止,这是我的代码:

    private void driverNo_TextChanged(object sender, EventArgs e)
    {

        // if driverNo text is empty then return all rows

        if (string.IsNullOrEmpty(driverNo.Text))
        {
            ((DataTable)dataGridView1.DataSource).DefaultView.RowFilter = string.Empty;
            return;
        }

        // if driverNo is a numerical value then view result

        int temp;
        if (int.TryParse(driverNo.Text, out temp))
            ((DataTable)dataGridView1.DataSource).DefaultView.RowFilter = "DriverNo = " + driverNo.Text;
        else
            MessageBox.Show("Invalid driver number.");
            driverNo.Text = "";
    }

最佳答案

DataSource的值是BindingSource的类型,而不是DataTable。基本上您的期望是不正确的。 DataTable实际上可能在支持BindingSource

您很可能在WinForms设计图面上有一个BindingSource组件。您可以通过以下类似方法进入表格:

var bindingSource = this.myBindingSource;
var dt = (DataTable)bindingSource.DataSource;


您可以通过以下方式间接获得它:

var bindingSource = (BindingSource)dataGridView1.DataSource;
var dt = (DataTable)bindingSource.DataSource;




对于您的代码,它可能看起来像这样:

private void driverNo_TextChanged(object sender, EventArgs e)
{

    // if driverNo text is empty then return all rows

    if (string.IsNullOrEmpty(driverNo.Text))
    {
        var bindingSource = (BindingSource)dataGridView1.DataSource.
        var table = (DataTable)bindingSource.DataSource;
        table.DefaultView.RowFilter = string.Empty;
        return;
    }

    // if driverNo is a numerical value then view result

    int temp;
    if (int.TryParse(driverNo.Text, out temp))
    {
        var bindingSource = (BindingSource)dataGridView1.DataSource.
        var table = (DataTable)bindingSource.DataSource;
        table.DefaultView.RowFilter = "DriverNo = " + driverNo.Text;
    }
    else
        MessageBox.Show("Invalid driver number.");
        driverNo.Text = "";
}

关于c# - 附加信息:无法将类型为“System.Windows.Forms.BindingSource”的对象转换为类型为“System.Data.DataTable”的对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20520966/

10-10 06:06