Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Datagridview在组合框列上复制和粘贴_C#_Copy Paste_Datagridtemplatecolumn_Datagridcomboboxcolumn - Fatal编程技术网

C# Datagridview在组合框列上复制和粘贴

C# Datagridview在组合框列上复制和粘贴,c#,copy-paste,datagridtemplatecolumn,datagridcomboboxcolumn,C#,Copy Paste,Datagridtemplatecolumn,Datagridcomboboxcolumn,我正在使用datagridview控件。我已经向它添加了一个combobox列,并从datatable中将其填充为; 现在,当数据被填充时,我试图从combobox列中选择一条记录,并使用复制/粘贴作为Ctrl+C和Ctrl+V。但这给了我一个错误,因为 粘贴的数据的单元格格式错误 我发现这是因为DisplayMember和ValueMember属性。但我也不能把它去掉。 如果我将DisplayMember和ValueMember设置为相同的值,那么它工作正常。但我必须保持这些领域的不同。

我正在使用datagridview控件。我已经向它添加了一个combobox列,并从datatable中将其填充为;

现在,当数据被填充时,我试图从combobox列中选择一条记录,并使用复制/粘贴作为Ctrl+C和Ctrl+V。但这给了我一个错误,因为

粘贴的数据的单元格格式错误

我发现这是因为DisplayMember和ValueMember属性。但我也不能把它去掉。
如果我将DisplayMember和ValueMember设置为相同的值,那么它工作正常。但我必须保持这些领域的不同。
有人知道如何解决这个错误吗

提前感谢

Vijay

我使用此代码将数据粘贴到网格中,如果粘贴的是值,我还可以处理下拉列表。。。 cast命令来自System.Linq

void Ctrl_KeyDown(object sender, KeyEventArgs e)
{
    if ((e.Control && e.KeyCode == Keys.V) || (e.Shift && e.KeyCode == Keys.Insert))
    {
        e.SuppressKeyPress = e.Handled = EditAppend(ClipboardAsDataRow);
    }
}


public bool EditAppend(IEnumerable<DataRow> rows)
{
    try
    {
        // whatever is your datasourse... 
        DataTable dt = new DataTable;
        foreach (DataRow row in rows)
        {
            dt.LoadDataRow(row.ItemArray, LoadOption.Upsert);
        }
        return true;    
    }
    catch ()
    {
        return false;
    }
}


/// <summary>
/// Get Clipboard as DataRows
/// </summary>
public IEnumerable<DataRow> ClipboardAsDataRow
{
get
    {
        DataTable dt = new DataTable();
        IDataObject iData = Clipboard.GetDataObject();
        if (iData == null || !iData.GetDataPresent(DataFormats.Text)) return dt.Rows.Cast<DataRow>();

        string table = (string)iData.GetData(DataFormats.Text);
        foreach (string row in value.Split("\n".ToCharArray()))
        {
            dt.LoadDataRow(row.Split("\r\x09".ToCharArray()), true);
        }
        return dt.Rows.Cast<DataRow>();
    } 
}
void Ctrl\u KeyDown(对象发送方,KeyEventArgs e)
{
if((e.Control&&e.KeyCode==Keys.V)| |(e.Shift&&e.KeyCode==Keys.Insert))
{
e、 SuppressKeyPress=e.Handled=EditAppend(剪贴板数据行);
}
}
公共bool editpappend(IEnumerable行)
{
尝试
{
//无论你的数据源是什么。。。
DataTable dt=新的DataTable;
foreach(数据行中的行)
{
dt.LoadDataRow(row.ItemArray,LoadOption.Upsert);
}
返回true;
}
捕获()
{
返回false;
}
}
/// 
///将剪贴板获取为数据行
/// 
公共IEnumerable剪贴簿AsDataRow
{
收到
{
DataTable dt=新的DataTable();
IDataObject iData=Clipboard.GetDataObject();
if(iData==null | | |!iData.GetDataPresent(DataFormats.Text))返回dt.Rows.Cast();
string table=(string)iData.GetData(DataFormats.Text);
foreach(value.Split(“\n”.ToCharArray())中的字符串行)
{
dt.LoadDataRow(row.Split(“\r\x09.ToCharArray()”),true);
}
返回dt.Rows.Cast();
} 
}

检测粘贴到的单元格是否为组合框,并进行适当设置

例如:

if (oCell is DataGridViewComboBoxCell)
{
    DataGridViewComboBoxCell tmp = oCell as DataGridViewComboBoxCell;
    if (tmp.Items.Contains(sCells[i]))
    {
        tmp.Value = tmp.Items[tmp.Items.IndexOf(sCells[i])];
    }
}

复制什么并粘贴到哪里?假设我有5行。我正在从第1行复制combobox列值,并将其粘贴到同一列的其他4行中。谢谢您的回复。我应该如何将其应用于我当前的示例?抱歉,此代码不符合您的要求。但是,捕获Ctrl+V和Ctrl-C并处理剪贴板仍然是一条路要走。
if (oCell is DataGridViewComboBoxCell)
{
    DataGridViewComboBoxCell tmp = oCell as DataGridViewComboBoxCell;
    if (tmp.Items.Contains(sCells[i]))
    {
        tmp.Value = tmp.Items[tmp.Items.IndexOf(sCells[i])];
    }
}