Datagrid 和 Table Styles 的一些技巧
本文讨论了设置 datagrid 的只读、在 tableStyles 之间切换以及通过名称访问列的通用方法。

引言
当我开始在 Windows 应用程序中使用 datagrid
时,我感到非常沮丧。有很多事情我想做,而且我很确定我能做到,但是弄清楚如何做却是个问题。所以我就想分享一些我学到的关于 datagrid
和表格样式的知识。
背景
在我使用的第一个应用程序中,我希望 datagrid
不允许插入。我花了一段时间才弄清楚如何实现这一点。表格样式是另一个给我带来麻烦的事情。在本文中,我将讨论我学到的东西。
代码
datagrid
是我们被给予使用的有点不发达的工具。我认为 datagridview
在 .NET 2.0 中做得更好,但那是另一篇文章的主题。首先,我想谈谈如何使 datagrid
只读。有一个属性允许你使 datagrid
只读,但它做的更多。当你在 datagrid
上设置只读属性时,实际上会发生三件事。首先是只读,它不允许你在单元格中键入或覆盖。接下来,你不能插入新行。最后,你不能删除现有行。在某些情况下,你可能希望允许编辑,但不允许插入或删除。甚至在某些情况下,你可能希望用户只编辑某些列,而不是其他列。这些属性存在于一个 DataView
中。DataView
是 datagrid
的 datasource
的最佳选择。代码如下:
//DGSource is a dataset with the table we want to display in our datagrid.
DGSource.Tables[0].TableName = “CustomerInfo1”;
DataView tmpDV = DGSource.Tables[0].DefaultView;
tmpDV.AllowDelete = false;
tmpDV.AllowEdit = false;
tmpDV.AllowNew = false;
dataGrid1.DataSource = tmpDV;
dataGrid1.Refresh();
有很多关于将 TableStyle
与 DataGrid
一起使用的文章。我认为最重要的一点是,TableStyle
中的 MappingName
必须与 dataset
中的表名匹配。请注意,在上面的代码中,我在使用 DataView
之前设置了 TableName
属性。

现在这是一个重要的点。如果你希望你的应用程序能够在不同的 tableStyle
之间切换,你所要做的就是将 tablename
属性切换到你在添加到 datagrid
的几个 tablestyle
中使用的不同的 mappingname
。在我包含的示例应用程序中,你将看到一个下拉列表,其中包含几个 tablestyle
选项可供选择。
最后,当你使用不同的表格样式时,会移动数据在 datagrid
中的位置,因此你需要知道从哪里获取特定数据。我编写了这个方法,它接受几个参数,以便从 datagrid
返回正确的数据,而无需硬编码列号。
private String ReturnDataGridValue(DataGrid p_dgd, Int32 p_row, String
p_fieldName, String p_tableStyleName)
{
String ret = null;
DataGridTableStyle tmpTS = p_dgd.TableStyles[p_tableStyleName];
if (tmpTS != null)
{
foreach (DataGridColumnStyle tmpDGCS in tmpTS.GridColumnStyles)
{
if (tmpDGCS.MappingName == p_fieldName)
{
ret = p_dgd[p_row,tmpTS.GridColumnStyles.IndexOf(tmpDGCS)].ToString();
break;
}
} //foreach
}
return ret;
}
关于 datagrid
,我还有最后一件事要注意。通常,你希望它们在 Windows 窗体最大化时正确展开。我发现你不应该设置停靠属性。而是使用锚定属性。将 datagrid
放置在你想要的位置后,将锚定属性设置为上、下、左、右。这将使 datagrid
在你更改窗体大小时正确展开。
结论
所以这只是一篇关于 datagrid
和 tablestyle
的快速文章。我希望你发现这些技巧对你正在处理的问题有所帮助。
历史
- 2006 年 5 月 1 日:首次发布