将新行插入到datagrid中,使用不同的列C#

时间:2015-02-13 08:48:31

标签: c# .net

我正在尝试在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);
}

你有什么想法吗?

1 个答案:

答案 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