0

私はdatagridviewコントロールで作業しています。私はそれにコンボボックスの列を追加し、datatableからデータを取り込みました。
Datagridviewコンボボックスカラムにコピー&ペーストする

DataTable datatable1 = new DataTable(); 
datatable1.Columns.Add("DisplayMember"); 
datatable1.Columns.Add("ValueMember"); 

//*** For loop to load datatable1 with values *** 

combobox1.DataSource = datatable1; 
combobox1.DisplayMember = "DisplayMember"; 
combobox1.ValueMember = "ValueMember"; 

データが移入されたときに今、私はコンボボックスの列からレコードを選択しようとするとCtrl + CとCtrl + Vとしてコピー/貼り付けを使用してしかし、それは

として私にエラーを与えているのです

あなたが貼り付けられたデータは、セルの書式が間違っています。..

私はそれが理由DisplayMemberとValueMemberでの特性であることを考え出した可能性があり。しかし、私はこれも取り除くことはできません。
DisplayMemberとValueMemberを同じ値に設定すると、正常に動作します。しかし、私はそれらのフィールドを異なるものにしなければならない。
誰もこのエラーを解決する方法を知っていますか?それは... キャストコマンドは、システムから貼り付けされている値である場合
ビジェイ

+0

コピーと貼り付けは何? – V4Vendetta

+0

私は5行を持っているとしましょう。私は行1からコンボボックスの列の値をコピーして、同じ列の他の4行に貼り付けています。 –

答えて

0

が、私は、グリッド内のデータに貼り付けるには、このコードを使用して、事前に

おかげで、私はまた、ドロップダウンに取り組んでいます。 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>(); 
    } 
} 
+0

ご返信ありがとうございます。どのように私の現在の例に適用する必要がありますか? –

+0

申し訳ありませんが、このコードはあなたが求めているものではありません。 しかし、Ctrl + VとCtrl-Cをトラップしてクリップボードを処理することは、引き続き行えます。 – Stig

0

貼り付けるセルがコンボボックスであることを検出し、適切に設定します。

例:

if (oCell is DataGridViewComboBoxCell) 
{ 
    DataGridViewComboBoxCell tmp = oCell as DataGridViewComboBoxCell; 
    if (tmp.Items.Contains(sCells[i])) 
    { 
     tmp.Value = tmp.Items[tmp.Items.IndexOf(sCells[i])]; 
    } 
} 
関連する問題