我正在尝试将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;。但是,在实际数据网格视图中,它们在视觉上看起来不像所选单元格(即未突出显示为蓝色)。
知道如何让它们在视觉上被选中吗?
答案 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());
}
}
}