65.9K
CodeProject 正在变化。 阅读更多。
Home

Datagrid 和 Table Styles 的一些技巧

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.24/5 (9投票s)

2006 年 5 月 1 日

CPOL

3分钟阅读

viewsIcon

43248

downloadIcon

480

本文讨论了设置 datagrid 的只读、在 tableStyles 之间切换以及通过名称访问列的通用方法。

Sample Image - DataGrid_TableStyles.gif

引言

当我开始在 Windows 应用程序中使用 datagrid 时,我感到非常沮丧。有很多事情我想做,而且我很确定我能做到,但是弄清楚如何做却是个问题。所以我就想分享一些我学到的关于 datagrid 和表格样式的知识。

背景

在我使用的第一个应用程序中,我希望 datagrid 不允许插入。我花了一段时间才弄清楚如何实现这一点。表格样式是另一个给我带来麻烦的事情。在本文中,我将讨论我学到的东西。

代码

datagrid 是我们被给予使用的有点不发达的工具。我认为 datagridview 在 .NET 2.0 中做得更好,但那是另一篇文章的主题。首先,我想谈谈如何使 datagrid 只读。有一个属性允许你使 datagrid 只读,但它做的更多。当你在 datagrid 上设置只读属性时,实际上会发生三件事。首先是只读,它不允许你在单元格中键入或覆盖。接下来,你不能插入新行。最后,你不能删除现有行。在某些情况下,你可能希望允许编辑,但不允许插入或删除。甚至在某些情况下,你可能希望用户只编辑某些列,而不是其他列。这些属性存在于一个 DataView 中。DataViewdatagriddatasource 的最佳选择。代码如下:

//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();

有很多关于将 TableStyleDataGrid 一起使用的文章。我认为最重要的一点是,TableStyle 中的 MappingName 必须与 dataset 中的表名匹配。请注意,在上面的代码中,我在使用 DataView 之前设置了 TableName 属性。

Mapping Name property for the tablestyle

现在这是一个重要的点。如果你希望你的应用程序能够在不同的 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 在你更改窗体大小时正确展开。

结论

所以这只是一篇关于 datagridtablestyle 的快速文章。我希望你发现这些技巧对你正在处理的问题有所帮助。

历史

  • 2006 年 5 月 1 日:首次发布
© . All rights reserved.