我正在尝试在daragridview(C#)中插入一个新行,其中6个来自databindingsource只有3行(它是一个带有一个数据表的数据集)。
这是我试图编写的代码,但它让我有一个例外:
private void cmdNewRow_CustomExecute(object sender, ExecutionEventArgs<ICommandButtonExecutor> e)
{
Fev018DataSet ds = (Fev018DataSet)(((BindingSource)FahrzeugBarcodeBindingSource.DataSource).DataSource);
int a = ds.Tables[0].Rows.Count;
ds.Tables[0].NewRow();
customGridViewBarcodes.AddNewRow();
例外是无法将类型数据集的obj强制转换为绑定源,来自此函数: 在方法public void Invoke(params object [] args)来自弱委托列表。
bool locked = false;
try
{
while (!locked)
{
locked = Monitor.TryEnter(this, 100);
if (!locked)
Application.DoEvents(); // do events to prevent
// prevent freezing von Invokes
}
if ((methodInfo == null) || (target == null)) return;
try
{
if (target.IsAlive)
methodInfo.Invoke(target.Target, args);
}
catch (TargetInvocationException ex)
{
// Get the _remoteStackTraceString of the Exception class
FieldInfo remoteStackTraceString = typeof(Exception)
.GetField("_remoteStackTraceString",
BindingFlags.Instance | BindingFlags.NonPublic); // MS.Net
if (remoteStackTraceString == null)
remoteStackTraceString = typeof(Exception)
.GetField("remote_stack_trace",
BindingFlags.Instance | BindingFlags.NonPublic); // Mono
// Set the InnerException._remoteStackTraceString
// to the current InnerException.StackTrace
remoteStackTraceString.SetValue(ex.InnerException,
ex.InnerException.StackTrace + Environment.NewLine);
// Throw the new exception
throw ex.InnerException;
}
catch (Exception)
{
throw;
}
}
finally
{
if (locked)
Monitor.Exit(this);
}
你有什么想法吗?
答案 0 :(得分:2)
例外是无法将类型数据集的obj从此函数
强制转换为绑定源
当你在这一行得到这个例外时
Fev018DataSet ds = (Fev018DataSet)(((BindingSource)FahrzeugBarcodeBindingSource.DataSource).DataSource);
它只是意味着FahrzeugBarcodeBindingSource.DataSource
后面的对象不是BindingSource
类型,而是类型DataSet
。
此行应为
Fev018DataSet ds = (Fev018DataSet)FahrzeugBarcodeBindingSource.DataSource;
或
DataSet ds = (DataSet)FahrzeugBarcodeBindingSource.DataSource;
或者您在代码的其他地方错误地将DataSet
分配给FahrzeugBarcodeBindingSource.DataSource
而不是BindingSource
。