1. 列自由拖拽
我們可以拖動教育的列放到最后一行,如圖
C1控件默認支持
2. 前幾列鎖定
Frozen 的數值 設為2,則前兩列鎖定,拉動橫向滾動條,前2列是不動的。用於定義性的屬性數據的顯示,比如工卡,姓名或物料代碼,物料名稱等數據。
3. 相同行合並的統計功能
總的C1控件設置
分列合並設置
4. 相同標題合並設置
完成這樣的功能不僅需要在C1控件進行設置,還需要完成一部分編碼才可以實現。
A. 首先像操作3一樣,對C1控件進行整體設置為可合並
B. 對具體的標題列設置為為可合並
C. 編寫代碼部分,放在觸發事件內部
c1FlexGrid1.Rows[0].AllowMerging = true;
// 循環標題行(共兩行)
for (int m = 0; m < c1FlexGrid1.Rows.Fixed; m++)
{
//設置列標題
if (m == 0)
{
c1FlexGrid1[m, 1] = "工卡";
c1FlexGrid1[m, 2] = "姓名";
c1FlexGrid1[m, 3] = "個人信息";
c1FlexGrid1[m, 4] = "個人信息";
c1FlexGrid1[m, 5] = "個人信息";
c1FlexGrid1[m, 6] = "個人信息";
}
if (m == 1)
{
c1FlexGrid1[m, 1] = "工卡";
c1FlexGrid1[m, 2] = "姓名";
c1FlexGrid1[m, 3] = "生日";
c1FlexGrid1[m, 4] = "地址";
c1FlexGrid1[m, 5] = "省份";
c1FlexGrid1[m, 6] = "教育";
}
}
5. C1行標題列居中的腳本
CellStyle style = c1FlexGrid1.Styles.Add("Row_TextAlign");
style.TextAlign = TextAlignEnum.CenterCenter;
c1FlexGrid1.Rows[0].Style = style;
6. C1行的Label信息提示Tip
7. C1行的Notes信息提示Tip
沒有實現
8. C1行背景色變換
// 循環標題行(共兩行)
for (int m = c1FlexGrid1.Rows.Fixed; m < c1FlexGrid1.Rows.Count; m++)
{
//設置列標題
if (m%2 == 0)
{
c1FlexGrid1.Rows[m].StyleNew.BackColor = Color.Gold;
}
}
C1的Cell的背景色變換
--這個Range的參數左上角到右下角的坐標
c1FlexGrid1.GetCellRange(3, 4).StyleNew.BackColor = Color.Cyan;
9. C1表達樹型控件
l 首先Grid的樣式要定義為Tree結構
l 增加根節點
l 在根節點下增加子節點即可
相關代碼如下:
c1FlexGrid1.Tree.Column = 1;
c1FlexGrid1.Tree.Style = C1.Win.C1FlexGrid.TreeStyleFlags.Simple;
Node node = null; List strList= new List();
strList.Add("河南");
strList.Add("四川");
strList.Add("廣西");
strList.Add("廣東");
for (int jj = 0; jj < strList.Count; jj++)
{
node = c1FlexGrid1.Rows.InsertNode(c1FlexGrid1.Rows.Count, 0);
node.Row[1] = strList[jj];
DataRow[] tmpRows = dt.Select("NATIVE_PLACE ='" + strList[jj] + "'");
for (int ii = 0; ii < tmpRows.Length; ii++)
{
node = c1FlexGrid1.Rows.InsertNode(c1FlexGrid1.Rows.Count, 1);
//node.Row[1] = tmpRows[ii][0].ToString();
node.Row[2] = tmpRows[ii][1].ToString();
node.Row[3] = tmpRows[ii][2].ToString();
node.Row[4] = tmpRows[ii][3].ToString();
node.Row[5] = tmpRows[ii][4].ToString();
node.Row[6] = tmpRows[ii][5].ToString();
node.Row[7] = tmpRows[ii][6].ToString();
node.Row[8] = tmpRows[ii][7].ToString();
}
}
10. C1設置顯示行數信息
對應的代碼信息
private void button3_Click(object sender, EventArgs e)
{
//為空或者無數據就退出
if (c1FlexGrid1 == null || c1FlexGrid1.Rows.Count == 1)
{
return;
}
c1FlexGrid1.Cols[0].Width = 30;
c1FlexGrid1.Cols[0].TextAlign = TextAlignEnum.LeftCenter;
int m, i, iFrom, iRow;
//設定行NO
m = c1FlexGrid1.Rows.Count;
iFrom = c1FlexGrid1.Rows.Fixed;
iRow = 1;
for (i = iFrom; i < m; i++)
{
c1FlexGrid1[i, 0] = iRow.ToString();
iRow++;
}//for (i = 1; i < m; i++)
}
11. C1的Excel導出
對應的代碼信息
private void button1_Click(object sender, EventArgs e)
{
//有數據才導出
if (c1FlexGrid1.Rows.Count <= c1FlexGrid1.Rows.Fixed)
{
MessageBox.Show("沒有數據可以導出");
return;
}
SaveFileDialog dlgSaveFile = new SaveFileDialog();
dlgSaveFile.Filter = "Excel Files(*.xls)|*.xls|CSV Files(*.csv)|*.csv";
dlgSaveFile.RestoreDirectory = true;
dlgSaveFile.CheckFileExists = false;
//選擇了文件才導出
if (dlgSaveFile.ShowDialog() == DialogResult.OK)
{
c1FlexGrid1.SaveExcel(dlgSaveFile.FileName);
}
}
12. C1設置顯示列信息
這個功能實現起來比較復雜,在SSB框架里面窗體基類實現了這個方法。點擊命令按鈕,彈出在選擇列的對話框,在對話框自動獲取該Grid里面所有的列,當對話框確定的時候,把保存選擇列的Style 保存在客戶端本地的文件里面,當原始窗體重新登陸的時候,就可以讀取這個Style文件,把保存好的數據參數重新讀取。
代碼比較復雜,只列舉程序的關鍵點,具體代碼可以參照原程序。
l 點擊列顯示設置,彈出列選擇對話框時,自動獲得父窗體對象,父窗體的Grid所有的列
l 選擇是否顯示Grid后,點擊對話框的確定,保存選擇的Style到緩存中一份,同時更改父窗體的Grid顯示,再保存一份Style數據到客戶端本地。
l 點擊列顯示讀取,從客戶端本地的Style文件讀取數據,設置Grid屬性。在SSB架構時,在窗體讀取的時候自動加載自定義的Style 文件屬性的。
13. C1設置的查找功能實現
這個功能實現起來也比較復雜,在SSB框架里面窗體基類實現了這個方法。點擊命令按鈕,彈出在查找對話的對話框,輸入要查找的信息,選中對應的Grid列,就可以在該列中查找對應的信息。目前僅支持選中列的查找,不支持全Grid數據的查找。
C1常用操作指南 B/S部分
C/S部分引用的是C1WebGrid控件,因為大家對GridView和ZTEGridView比較熟,相同的屬性我這里就不介紹了,只介紹C1WebGrid特有的屬性。
- 列寬度改變
可以手工拖拽行的寬度
- 列位置拖拽
與C/S一樣,C1WebGird可以手動改變列的位置
- 列鎖定
當滾動條滾動時,前面Fix的列是固定不動