以编程方式将单元格和行添加到DataGridView

han

我正在努力DataGridViewComboBoxCell在某些情况下(例如事件),我必须ComboBox在Form的中预选一个值DataGridView当用户更改一个框时,我可以通过编程方式更改另一个框,如下所示:

var item = ItemName.Items.GetListItem(name);
if (item != null)
{
    _loading = true; // that's needed to come around another CellValueChanged events
    itemView.Rows[e.RowIndex].Cells["ItemName"].Value = item;
    _loading = false;
}

我正在这样填充ItemName.Items

foreach (var item in _model.DefaultData.ItemList)
{
    if (item.Value.Code.HasValue()) ItemCode.Items.Add(new ListItem(item.Key, item.Value.Code));
    ItemName.Items.Add(new ListItem(item.Key, item.Value.Name));
}

GetListItem方法:

public static ListItem GetListItem(this DataGridViewComboBoxCell.ObjectCollection col, string name)
{
    ListItem retItem = null;
    foreach (ListItem item in col)
    {
        if (item.Name == name) { retItem = item; break; }
    }
    return retItem;
}

很好,但是...

现在,我想像这样DataGridView在表单加载中添加行

foreach (var item in _model.SelectedItems)
{
    var row = new DataGridViewRow();
    row.Cells.Add(new DataGridViewTextBoxCell { Value = item.Id });
    row.Cells.Add(new DataGridViewComboBoxCell { Value = ItemCode.Items.GetListItem(item.Code) });
    row.Cells.Add(new DataGridViewComboBoxCell { Value = ItemName.Items.GetListItem(item.Name) });
    row.Cells.Add(new DataGridViewTextBoxCell { Value = item.Units });
    ...
    itemView.Rows.Add(row);
}

并引发心爱的DataGridViewComboBox value is not valid异常。请帮助,我对此没有想法。我不想使用DataSource或类似的东西。ItemCodeItemName列项目已填充并通过正确返回GetListItem()我不明白为什么它可以正常工作,但是在表单加载时它不起作用(如图所示也不起作用)。

编辑:对不起,忘了添加。

我的ListItem类:

public class ListItem
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ListItem(int sid, string sname)
    {
        Id = sid;
        Name = sname;
    }
    public override string ToString()
    {
        return Name;
    }
}

我已经把它放在表单加载中了:

ItemName.ValueMember = "Id";
ItemName.DisplayMember = "Name";
ItemCode.ValueMember = "Id";
ItemCode.DisplayMember = "Name";
han

好的,我设法自己解决了。

显然,仅DataGridViewComboBoxColumn.Items包含可能的项目还不够如果要以DataGridViewComboBoxCell.Items编程方式添加新行还必须添加项目

因此,如果其他人尝试使用我的方法而不使用诸如此类的数据绑定DataTable,这是我的解决方案:

foreach (var item in _model.SelectedItems)
{
    var row = new DataGridViewRow();
    var codeCell = new DataGridViewComboBoxCell();
    codeCell.Items.AddRange(ItemCode.Items);
    codeCell.Value = ItemCode.Items.GetListItem(item.Code);
    var nameCell = new DataGridViewComboBoxCell();
    nameCell.Items.AddRange(ItemName.Items);
    nameCell.Value = ItemName.Items.GetListItem(item.Name);
    row.Cells.Add(new DataGridViewTextBoxCell { Value = item.Id });
    row.Cells.Add(codeCell);
    row.Cells.Add(nameCell);
    row.Cells.Add(new DataGridViewTextBoxCell { Value = item.Units });
    row.Cells.Add(new DataGridViewTextBoxCell { Value = item.Quantity });
    row.Cells.Add(new DataGridViewTextBoxCell { Value = item.PriceLt });
    row.Cells.Add(new DataGridViewTextBoxCell { Value = item.PriceEu });
    itemView.Rows.Add(row);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何以编程方式将单元格添加到DataGridView?

来自分类Dev

以编程方式将下拉列表添加到特定单元格

来自分类Dev

如何[以编程方式]将图像添加到现有tableView的单元格?

来自分类Dev

无法将单元格添加到行dynamicall

来自分类Dev

无法将单元格添加到行dynamicall

来自分类Dev

如何在没有StoryBoard的情况下以编程方式将单元格添加到UICollectionView

来自分类Dev

将超链接添加到d3.js表行和单元格

来自分类Dev

将超链接添加到d3.js表的行和单元格

来自分类Dev

将值添加到WPF中的行和单元格

来自分类Dev

当单元格和位置是动态的时,将超链接添加到单元格

来自分类Dev

如何以不同的形式将文本添加到dataGridView单元格C#

来自分类Dev

将单元格单击事件处理程序添加到datagridview?

来自分类Dev

以编程方式将ComboBox添加到DataGridView

来自分类Dev

需要帮助,尝试使用月中的天数将表中的单元格和行添加到表中

来自分类Dev

UICollectionView将图像添加到单元格

来自分类Dev

动态将公式添加到Excel单元格

来自分类Dev

将LookupComboBox添加到CXGrid单元格

来自分类Dev

将列添加到单元格数组

来自分类Dev

将图像添加到单元格

来自分类Dev

将静态单元格添加到UICollectionView

来自分类Dev

OpenXML将单元格添加到WorkSheet

来自分类Dev

Xamarin将TouchRecognizer添加到每个单元格

来自分类Dev

将单元格添加到集合视图。迅速

来自分类Dev

动态将单元格添加到SwiftUI LazyGrid

来自分类Dev

如何将单元格添加到uitableview

来自分类Dev

将按钮添加到单元格

来自分类Dev

将列添加到单元格数组

来自分类Dev

UICollectionView将图像添加到单元格

来自分类Dev

将按钮添加到UITableView单元格

Related 相关文章

热门标签

归档