直观地选择datagridview单元格

时间:2015-06-04 09:57:03

标签: c# datagridview

我正在尝试将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());

            }
        }

    }

调试验证单元是否被选中&#34;。但是,在实际数据网格视图中,它们在视觉上看起来不像所选单元格(即未突出显示为蓝色)。

知道如何让它们在视觉上被选中吗?

1 个答案:

答案 0 :(得分:1)

在显示控件之前,您无法为其设置焦点 Shown事件的事件处理程序是这个的好地方。当第一次显示表单(MSDN Form.Shown Event)时,此事件仅引发一次。

您只需要在变量tags中保存tagList值,以便稍后在Shown eventhandler中使用

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());

        }
    }
}