原創(chuàng)|其它|編輯:郝浩|2010-06-17 11:10:06.000|閱讀 3615 次
概述:在使用XtraGrid的gridControl或DataGridView中,里面欄目的設(shè)置比較麻煩。經(jīng)過反復(fù)研究找出一種簡單的解決方法。大致思路如下:定義一個(gè)和表結(jié)構(gòu)類似的XML文件,保存表字段的顯示標(biāo)題、是否顯示、寬度等信息,在GridControl顯示的時(shí)候,直接讀取這些信息。再在工具條中加上欄目設(shè)置的功能。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
在使用DEV XtraGrid的gridControl或DataGridView中,里面欄目的設(shè)置比較麻煩。DEV XtraGrid控件中實(shí)現(xiàn)動(dòng)態(tài)修改列顯示問題也成為眾多開發(fā)者面臨的難題,經(jīng)過反復(fù)研究找出一種簡單的解決方法。大致思路如下:定義一個(gè)和表結(jié)構(gòu)類似的XML文件,保存表字段的顯示標(biāo)題、是否顯示、寬度等信息,在GridControl顯示的時(shí)候,直接讀取這些信息。再在工具條中加上欄目設(shè)置的功能。
具體實(shí)現(xiàn)步驟:
1. 當(dāng)然使用傳說中的CodeSmith生成XML文件,CodeSmith模板代碼如下:
<%@ CodeTemplate Language="C#" TargetLanguage="text" ResponseEncoding="UTF-8" Description="Generates a update stored procedure." %>
<%@ Property Name="SourceDatabase" Type="SchemaExplorer.DatabaseSchema" Category="Context" Description="Database that the documentation should be based on." %>
<%@ Property Name="Author" Type="System.String" Default="Pantao" Optional="False" Category="Description" Description="About Author" %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Import Namespace="SchemaExplorer" %>
<script runat="template">
public string GetSqlParameterStatement(ColumnSchema column)
{
string param = "";
switch (column.DataType)
{
case DbType.Decimal:
{
param += "(" + column.Precision + ", " + column.Scale + ")";
break;
}
case DbType.Boolean:
case DbType.Int32:
case DbType.DateTime:
case DbType.Double:
case DbType.Single:
case DbType.Byte:
case DbType.Int64:
case DbType.Int16:
break;
default:
{
if (column.Size > 0)
{
param += "(" + column.Size + ")";
}
break;
}
}
return param;
}
</script>
<% TableSchemaCollection tables = new TableSchemaCollection(SourceDatabase.Tables); %>
DataBase(Tables:<% =tables.Count.ToString() %>)
Author:<% =Author %> Date:<% =DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString() %>
<% for(int i=0; i<tables.Count; i++) { %>
<% =i + 1 + "." %>TableName:【<% =tables[i].Name %>】
<% for(int k=0; k<tables[i].Columns.Count; k++) { %>
(<% = k + 1 %>). <% =tables[i].Columns[k].Name %> <% if (tables[i].Columns[k].IsPrimaryKeyMember) {%>Primary<% } %> <% =tables[i].Columns[k].NativeType + GetSqlParameterStatement(tables[i].Columns[k]) %> <% if(tables[i].Columns[k].AllowDBNull) { %>AllowNull<% } %>
<% ="[Description:]" + tables[i].Columns[k].Description %>
<% } %>
<% } %>
生成的XML文件格式如下:
<?xml version="1.0" standalone="yes"?>
<xml>
<GridView>
<Caption>編號(hào)</Caption>
<FieldName>ID</FieldName>
<ColumnName>gridColumn1</ColumnName>
<Visible>false</Visible>
<VisibleIndex>-1</VisibleIndex>
<Fixed>None</Fixed>
<Width>20</Width>
<ColumnEdit />
</GridView>
<GridView>
<Caption>紗線名稱</Caption>
<FieldName>YarnName</FieldName>
<ColumnName>gridColumn2</ColumnName>
<Visible>true</Visible>
<VisibleIndex>1</VisibleIndex>
<Fixed>Left</Fixed>
<Width>200</Width>
<ColumnEdit />
</GridView>
....................................
</xml>
讀取xml文件,轉(zhuǎn)換為gridControl中Column格式的方法:
public static void SetGridView(DevExpress.XtraGrid.Views.Grid.GridView gridView, string xmlFile)
{
gridView.Columns.Clear();
DataSet ds = new DataSet();
ds.ReadXml(xmlFile);
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
DevExpress.XtraGrid.Columns.GridColumn gridCoulumn = new DevExpress.XtraGrid.Columns.GridColumn();
gridCoulumn.Caption = ds.Tables[0].Rows[i]["Caption"].ToString();
gridCoulumn.FieldName = ds.Tables[0].Rows[i]["FieldName"].ToString();
gridCoulumn.Name = ds.Tables[0].Rows[i]["ColumnName"].ToString();
gridCoulumn.VisibleIndex = int.Parse(ds.Tables[0].Rows[i]["VisibleIndex"].ToString());
gridCoulumn.Visible = ds.Tables[0].Rows[i]["Visible"].ToString().ToLower() == "true" ? true : false;
if (!gridCoulumn.Visible)
{
gridCoulumn.VisibleIndex = -1;
}
gridCoulumn.Width = int.Parse(ds.Tables[0].Rows[i]["Width"].ToString());
switch (ds.Tables[0].Rows[i]["Fixed"].ToString().ToLower())
{
case "none":
gridCoulumn.Fixed = DevExpress.XtraGrid.Columns.FixedStyle.None;
break;
case "left":
gridCoulumn.Fixed = DevExpress.XtraGrid.Columns.FixedStyle.Left;
break;
case "right":
gridCoulumn.Fixed = DevExpress.XtraGrid.Columns.FixedStyle.Right;
break;
}
if (ds.Tables[0].Rows[i]["ColumnEdit"].ToString() == "RepositoryItemLookUpEdit")
{
}
gridView.Columns.Add(gridCoulumn);
}
}
================
在窗體綁定數(shù)據(jù)之前,設(shè)定窗體的欄目:YarnNew.Classes.Common.SetGridView(gridView1, xmlFile);
欄目設(shè)置的部分代碼:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace YarnNew
{
public partial class FrmColumnSetup : YarnNew.FrmBase
{
public FrmColumnSetup()
{
InitializeComponent();
FixShow();
}
public delegate void RefreshEventHandler();
public event RefreshEventHandler RefreshData;
DataSet ds = new DataSet();
private string xmlFile;
public string XmlFile
{
set { xmlFile = value; }
get { return xmlFile; }
}
private void FixShow()
{
DataTable dt = new DataTable();
dt.Columns.Add("FixShow", typeof(string));
dt.Columns.Add("FixName", typeof(string));
DataRow dr1 = dt.NewRow();
dr1[0] = "無設(shè)置";
dr1[1] = "None";
dt.Rows.Add(dr1);
DataRow dr2 = dt.NewRow();
dr2[0] = "固定左邊";
dr2[1] = "Left";
dt.Rows.Add(dr2);
DataRow dr3 = dt.NewRow();
dr3[0] = "固定右邊";
dr3[1] = "Right";
dt.Rows.Add(dr3);
repositoryItemLookUpEdit1.DataSource = dt;
}
private void FrmColumnSetup_Load(object sender, EventArgs e)
{
ds = new DataSet();
ds.ReadXml(xmlFile);
DataTable dt = ds.Tables[0].Copy();
dt.Columns.Add("BoolVisible", typeof(bool));
//dt.Columns.Add("IntVisibleIndex", typeof(int));
for (int i = 0; i < dt.Rows.Count; i++)
{
dt.Rows[i]["BoolVisible"] = dt.Rows[i]["Visible"].ToString().ToLower() == "true" ? true : false;
//dt.Rows[i]["IntVisibleIndex"] = int.Parse(dt.Rows[i]["VisibleIndex"].ToString());
}
gridControl1.DataSource = dt;
}
private void sbSave_Click(object sender, EventArgs e)
{
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
ds.Tables[0].Rows[i]["Caption"] = gridView1.GetRowCellDisplayText(i, gridView1.Columns["Caption"]);
ds.Tables[0].Rows[i]["Visible"] = gridView1.GetRowCellValue(i, gridView1.Columns["BoolVisible"]).ToString().ToLower();
ds.Tables[0].Rows[i]["VisibleIndex"] = gridView1.GetRowCellValue(i, gridView1.Columns["VisibleIndex"]).ToString();
ds.Tables[0].Rows[i]["Fixed"] = gridView1.GetRowCellValue(i, gridView1.Columns["Fixed"]).ToString();
ds.Tables[0].Rows[i]["Width"] = gridView1.GetRowCellValue(i, gridView1.Columns["Width"]).ToString();
}
ds.WriteXml(xmlFile);
if (RefreshData != null)
{
RefreshData();
}
this.Close();
}
}
}
慧都科技作為Developer Express公司目前在中國唯一正式授權(quán)的經(jīng)銷商,不僅為DXperience提供了全面的技術(shù)支持服務(wù),同時(shí)還傾情打造 DevExpress for.net高級(jí)培訓(xùn),使您快速掌握DevExpress for .NET控件的使用方法及應(yīng)用技巧,從根本上提高您的DevExpress for .NET控件應(yīng)用能力,讓您在項(xiàng)目開發(fā)中事半功倍!
另外,為了從根本上幫您解決數(shù)據(jù)快速錄入的問題,慧都控件網(wǎng)傾力打造了EVSolution QuickInput方案。它不僅支持全鍵盤操作,實(shí)現(xiàn)快速光標(biāo)切換,而且還能進(jìn)行聯(lián)想查詢、復(fù)雜數(shù)據(jù)搜索查詢等功能。另外它還提供了豐富而友好的用戶界面和用戶體驗(yàn),您可以根據(jù)需要,自動(dòng)規(guī)范化格式,真正將Web軟件的優(yōu)勢(shì)發(fā)揮得淋漓盡致!
據(jù)慧都科技透露,DevExpress旗下著名控件套包:DXperience™ Universal Subscription v2010 vol 1已經(jīng)正式發(fā)布,該版本增加了眾多新的WPF和Silverlight控件的新功能到整個(gè)產(chǎn)品線。眾多新功能搶先體驗(yàn)!請(qǐng)關(guān)注慧都控件網(wǎng)!
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:慧都控件網(wǎng)