【问题标题】:visually select datagridview cell直观地选择 datagridview 单元格
【发布时间】:2015-08-18 21:09:21
【问题描述】:

我正在尝试将 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 上,它们在视觉上看起来不像选定的单元格(即未突出显示为蓝色)。

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

【问题讨论】:

    标签: c# datagridview


    【解决方案1】:

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

    您只需将来自tagListtags 值保存在变量中,以便以后在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());
    
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多