我正在研究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 :(得分:0)
我使用此代码粘贴网格中的数据,我也使用下拉列表,如果它是粘贴的值... 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>();
}
}
答案 1 :(得分: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])];
}
}