直观地选择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());
}
}
}
调试验证单元格是否被"选中"。然而,在实际的数据视图中,它们在视觉上看起来不像选定的单元格(即没有突出显示蓝色)。
你知道如何让他们看起来在视觉上被选中吗?
在控件显示之前,不能对其设置焦点。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());
}
}
}