0

datagridview 컨트롤에서 일하고 있습니다. 나는 그것에 콤보 박스 (combobox) 컬럼을 추가하고 그것을 데이터 테이블로부터 채 웁니다; 이제 데이터 내가 콤보 상자의 열에서 레코드를 선택하려고 및 복사/Ctrl + C와 Ctrl 키 + V.로 붙여 넣기 사용하지만
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"; 

내가 때문에 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])]; 
    } 
}