本文是系列文章,陆续发表于电脑编程技巧与维护杂志。
DevExpres产品是全球享有极高声誉的一流控件套包产品!国内典型用户包括:用友、金蝶、神州数码、工信部、中国石化、汉王科技等众多大中型科技型企业。它功能强大、界面美观,是.NET基础控件扩展包。可以让您快速开发出完美、强大的应用程序。而且使用起来也很方便,容易上手。美中不足的是、该控件包自带的演示中、没有运行时配置(动态设置)控件属性的介绍,这对于很多软件开发工作来说,很不方便,本人结合自己教学开发实例,在这里就相关控件的使用做一介绍,希望对读者朋友能够有所助益。
开发环境:VS2008 C#,Access,DevExpress 控件包 V9.1.4。
示例软件运行环境:.netframework2.0,windows xp/windows2003/windows7。
要明白如何动态设置XtraGridView的数据列,我们首先需要了解它都需要哪些属性被设置了才能正确应用。我们在设计期界面中随便拉一个XtraGrid控件到空白窗体,然后点击XtraGrid控件的RunDesigner按钮,之后点击 Columns选项卡,再点击 Add按钮添加一个表格列(gridColumn1),之后选中我们刚刚添加的gridColumn1,在窗口的右侧我们看到这个表格列的各种属性。
我们的目标是设置表格列能够显示不同的编辑控件,请留意这样一个属性:ColumnEdit,点击右侧的下拉按钮,我们看到有这样的一个窗口列出了所有可用的编辑控件列表,如图一所示:
这里我们选择ComboBoxEdit控件作为示例,其他控件类同。
当我们选择了ComboBoxEidt控件(下拉列表)以后,请注意实际显示的名称是:RepositoryItemComboBox。这是因为、DevExpress的控件包中,对于ColumnEdit控件进行了一些列的封装操作以便基础控件能够很好地应用在GridVieww中。封装后的ComboBox控件的名字就是RepositoryItemComboBox。类似的还有其他多种控件,读者朋友们可一一尝试着看看、或者查看示例项目的源码(DevControlpractice.LFH.Function.FuncGridControl第183行)。
我们知道、对于下拉列表控件,主要的工作就是要设置下拉的列表信息,继续向下查看它的属性,我们留意到这样一个属性:Items。点击、我们看到下面这样一个窗口,如图2所示。
好了,至此、我们明白:如果要添加一个下拉列表作为表格列的编辑控件,需要做这样几个动作:
1、 添加表格列到表格中去;
2、 设置表格列的属性:可见与否、是否可写/只读;
3、 添加表格列的编辑控件;
4、 设置编辑控件的相关属性:编辑控件类型,编辑控件的各种属性如列表值、查询值等。
既然、我们设置一个表格需要知道表格列的这些属性,那么我们可以在设计之前就先确定这些属性,并把它们存放在一个地方去,从而形成我们的数据字典信息(关于数据字典、感兴趣的朋友可以查阅相关资料、这里我们不再多说)。
这里我们设计一个表格来存放我们需要的各种相关信息:如图:
这样做的好处是显而易见的:我们可以很直观地对表格各个数据列的呈现形式进行设置、查看;运行过程中如果需要修改,那么我们只需要调整这里的设置就可以立刻看到执行的效果而无需再次进行任何编码处理。
有了上面数据列的信息设置、接下来我们就尝试用代码实现上面这些工作,从而使得我们能够很好地在运行期间控制表格的列属性。
代码实现:
1、要添加表格列到表格中,我们用如下代码:
DevExpress.XtraGrid.Columns.GridColumn gcol = new DevExpress.XtraGrid.Columns.GridColumn();//创建一个新的表格列
(gview as DevExpress.XtraGrid.Views.Card.CardView).Columns.Add(gcol);//把新创建的表格列添加到表格中去。这里要切记:一定要在创建之后立刻加入到表格中去,然后再去设置它的相关属性,否则设置的各种属性都无法呈现出来。
2、设置表格列的属性:
gcol.Caption = dt.Rows[i]["FieldDescribe"].ToString();//设置列的描述文字;
gcol.Name = "Col_" + dt.Rows[i]["FieldName"].ToString();//设置列名称、这样才能把数据源中相应列的数据显示在GridView中;
gcol.MinWidth = 60;//设置默认列宽,这样做是避免数据字典中未设置列宽时导致列宽过小的现象;
try {
gcol.Width = Convert.ToInt32(dt.Rows[i]["Width"].ToString());//设置列宽为字典中设置的宽度;
if (gcol.Width <= 20) gcol.BestFit();//如果列宽过小、则设置为自适应宽度。
}
catch {
col.BestFit();
}
gcol.CustomizationCaption = "自定义";
DevExpress.XtraEditors.Repository.RepositoryItem ColEditor =
GetDevExpressGridColumnType(dt.Rows[i]["ControlName"].ToString());//根据字典设置信息设置列的编辑控件
gcol.ColumnEdit = ColEditor;//注意、要先把控件设置为列的编辑控件,然后才能进行下面的具体属性设置、否则设置无效。
//if (gcol.Width <= 50) gcol.BestFit();
gcol.ColumnEditName = "Edit_" + dt.Rows[i]["FieldName"].ToString();
gcol.FieldName = dt.Rows[i]["FieldName"].ToString();
//************设置可见属性
if ((dt.Rows[i]["SysIsVisible"].ToString()== "True")) gcol.Visible = true;
else gcol.Visible = false;
3、针对表格列的编辑控件ComboBox控件的属性进行设置:
if (dt.Rows[i]["ControlName"].ToString() == "ComboBox") {
DevExpress.XtraEditors.Repository.RepositoryItemComboBox cb = gcol.ColumnEdit as DevExpress.XtraEditors.Repository.RepositoryItemComboBox;
cb.TextEditStyle = TextEditStyles.DisableTextEditor;
接下来我们设置表格列的只读属性:
设置宽度:
#region 设置宽度
int ColumnWidth = 0;
try {
ColumnWidth = Convert.ToInt32(dt.Rows[i]["Width"].ToString());
}
catch {
ColumnWidth = 0;
}
if (myCol == null) continue;
else {
if (ColumnWidth == 0) myCol.BestFit();
else myCol.Width = ColumnWidth;
}
#endregion
好了、至此,我们已经根据我们在数据字典中设置的信息,对表格中各个数据列的展现形式进行了设置,运行程序就看到效果了,如图4所示: