直观地选择datagridview单元格

本文关键字:单元格 datagridview 选择 直观 | 更新日期: 2023-09-27 17:53:35

我试图使用一个datagridview作为一个"标签"网格。我有很多对象,我想设置和编辑"标签"。datagridview中的每个单元格都有一个字符串标签,datagridview是多选择的,所以用户可以选择很多标签。

但是,我希望能够编辑它们。因此,当我加载datagridview时,我想以编程方式选择与现有标签对应的单元格。

代码非常直接:

public frmSaveQuery(string Name, string Description, string tagList, List<TagType> AllTags)
    {
        InitializeComponent();
        TagList = AllTags;
        Cancelled = true;
        txtQueryName.Text = Name;
        txtDescription.Text = Description;
        string[] tags = tagList.Split(new string[] {"|"}, StringSplitOptions.RemoveEmptyEntries);
        foreach (DataGridViewRow row in tagSelector.Rows)
        {
            foreach (DataGridViewCell cell in row.Cells)
            {
                if (tags.Contains(cell.Value.ToString().ToUpper()))
                {
                    cell.Selected = true;
                }
                else
                {
                    cell.Selected = false;
                }
            }
        }
        foreach (DataGridViewRow row in tagSelector.Rows)
        {
            foreach (DataGridViewCell cell in row.Cells)
            {
                if (cell.Selected) Debug.WriteLine (cell.Value.ToString());
            }
        }
    }

调试验证单元格是否被"选中"。然而,在实际的数据视图中,它们在视觉上看起来不像选定的单元格(即没有突出显示蓝色)。

你知道如何让他们看起来在视觉上被选中吗?

直观地选择datagridview单元格

在控件显示之前,不能对其设置焦点。
Shown事件的事件处理程序是一个很好的地方。此事件仅在首次显示表单时引发一次(MSDN表单)。显示事件)。

您只需要在变量中保存tagList中的tags值,以便以后在Shown事件处理程序中使用

private String[] _Tags;
public frmSaveQuery(string Name, 
                    string Description, 
                    string tagList, 
                    List<TagType> AllTags)
{
    InitializeComponent();
    TagList = AllTags;
    Cancelled = true;
    txtQueryName.Text = Name;
    txtDescription.Text = Description;
    //Save tags in the class variable
    _Tags = tagList.Split(new string[] {"|"}, StringSplitOptions.RemoveEmptyEntries);
    //Wiring up handler to the event
    this.Shown += frmSaveQuery_Shown;
}

public void frmSaveQuery_Shown(Object sender, EventArgs e)
{
    if (_Tags == null || _Tags.Length == 0)
        return;
    foreach (DataGridViewRow row in tagSelector.Rows)
    {
        foreach (DataGridViewCell cell in row.Cells)
        {
            if (tags.Contains(cell.Value.ToString().ToUpper()))
            {
                cell.Selected = true;
            }
            else
            {
                cell.Selected = false;
            }
        }
    }
    foreach (DataGridViewRow row in tagSelector.Rows)
    {
        foreach (DataGridViewCell cell in row.Cells)
        {
            if (cell.Selected) Debug.WriteLine (cell.Value.ToString());
        }
    }
}