我的代码有一个奇怪的问题。我目前正在为我的数据网格编写一个过滤器。
每当用户清除文本字段时,就会出现以下错误消息:
无法将类型为“ 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/