是否可以在DataGridView
的单元格中允许多个对象?
我想在第一列中显示一个Group,然后在它旁边的列中显示我想要显示该组中但在一个单元格中的所有用户(组名旁边的单元格)。这不能是字符串操作,因为我需要能够点击每个用户并拖放它们。我正在使用DataGridview
链接到SQL查询数据库。
我在Visual Studio 2010中使用Visual Basic。
答案 0 :(得分:1)
不幸的是,你无法在DataGridView中执行此操作。但是,您可以创建一个如下所示的表:
GROUP USER
------ -----
Group1 User1
Group1 User2
Group1 User3
Group2 UserA
Group2 UserB
执行此操作后,您可以处理DataGridView的CellFormatting
事件,并在上述单元格的值匹配时将e.FormattedValue
设置为String.Empty
。然后你的桌子将“看起来”像:
GROUP USER
------ -----
Group1 User1
User2
User3
Group2 UserA
UserB
这几乎就是你要找的东西。如果您希望网格线消失,您可以改为处理DataGridView的CellPainting
事件以绘制正确的边框,中心文本等。
更新:这是使用CellFormatting事件隐藏单元格内容的示例。在这个例子中,我只是使用List作为我的数据源,但你可以用它代替你的SQL数据源,DataTable等。
public partial class Form1 : Form
{
private List<GroupUserRow> _rows = new List<GroupUserRow>();
public Form1()
{
InitializeComponent();
_rows.Add(new GroupUserRow { Group = "Group1", User = "User1" });
_rows.Add(new GroupUserRow { Group = "Group1", User = "User2" });
_rows.Add(new GroupUserRow { Group = "Group1", User = "User3" });
_rows.Add(new GroupUserRow { Group = "Group2", User = "UserA" });
_rows.Add(new GroupUserRow { Group = "Group2", User = "UserB" });
dataGridView1.DataSource = _rows;
}
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.RowIndex >= 0 && e.ColumnIndex == 0)
{
int prevRowIndex = e.RowIndex - 1;
if (prevRowIndex >= 0 && dataGridView1[0, prevRowIndex].Value == e.Value)
{
//this just "hides" the value from the screen, the value is not
//removed from the cell
e.Value = String.Empty;
e.FormattingApplied = true;
}
}
}
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex >= 0 && e.ColumnIndex >= 0)
{
MessageBox.Show("This cell's value is: " + dataGridView1[e.ColumnIndex, e.RowIndex].Value);
}
}
}
public class GroupUserRow
{
public string Group { get; set; }
public string User { get; set; }
}