//自動調整datagrid列寬
colstyle;
datatable dt = (datatable)datagrid.datasource;
//迴圈列
for(int col=0; col width)
width = size.width;
}g.dispose();
if(width < datagrid.preferredcolumnwidth)
width = datagrid.preferredcolumnwidth;
if(datagrid.tablestyles.count > 0)
datagrid.tablestyles[0].gridcolumnstyles[col].width = (int)width + 10;
else
}if(datagrid.tablestyles.count == 0)
}在使用vs2005時進行wince開發時,用datagrid控制項顯示**資料,當**內容過多時,datagrid控制項單元格寬度並不足以用來完全顯示**中的資料內容,,只有自己每次去拉動分界線,來進行調整。當出現**字段比較多時,這樣做就顯得很麻煩。
pda本身螢幕就很小,即使只顯示3-5列,拖動依舊很煩人,因此就有了實現自動調整列寬功能的想法。
首先到網上搜了一下,只發現乙個pc機用的,vb.net原始碼的(出處不明),如下:
先定義乙個sub過程autosizecol,用來調整datagrid中的列寬。
如下:public sub autosizecol(byval col as integer)
dim width as single
width = 0
dim numrows as integer
numrows = ctype(datagrid1.datasource, datatable).rows.count
dim g as graphics
g = graphics.fromhwnd(datagrid1.handle)
dim sf as stringformat
sf = new stringformat(stringformat.generictypographic)
dim size as sizef
dim i as integer
i = 0
do while (i < numrows)
size = g.measurestring(datagrid1(i, col).tostring, datagrid1.font, 500, sf)
if (size.width > width) then
width = size.width
end if
i = (i + 1)
loop
g.dispose()
datagrid1.tablestyles("customers").gridcolumnstyles(col).width = ctype(width, integer)
end sub
現在就可以**內容來定義整張表所有列的寬度了。如下:
public sub autosizetable()
dim numcols as integer
numcols = ctype(datagrid1.datasource, datatable).columns.count
dim i as integer
i = 0
do while (i < numcols)
autosizecol(i)
i = (i + 1)
loop
end sub
只要使用以上兩個sub過程就可以達到你想要的結果了!
我打算做了一下改造,想改成c#並放到wince下執行,結果發現graphics.fromhwnd(datagrid1.handle)這句就報錯了,而且g.measurestring(datagrid1(i, col).tostring, datagrid1.font, 500, sf)方法在cf中支援的也不好,既然net提供的方法不好用,那就自己來做,思路如下:通過遍歷根據內容更改列寬,首先獲取單元格中存放的字串,用字串的長度乘以每個字元佔據的象素數,得到結果後設定成列寬。同時考慮到中文字元和英文(數字)的字串佔據象素不同,因此先將字串轉成位元組再計算。
解決問題,**如下:
public void autosizetable(datagrid dgdata)
}private static void autosizecol(datagrid dgdata, int colindex)}}
dgdata.tablestyles[0].gridcolumnstyles[colindex].width = textcount * 7;
}在wince下測試,宋體10號字,乘7效果不錯。
優點:原理簡單,實現也不難,並且通用性比較好。
缺點:因為是遍歷,速度和效能會低一點,會出現滾動條,個人覺得比讓使用者拖動列分界線要好的多。
GridView自動改變列寬
if gridview1.footerrow.visible true 如果gridview表尾可見,將表尾列寬參與比較 for j 0 j colcount j width gridviewwidth 5 gridview最大字元數乘於乙個字元顯示寬度得到gridview顯示寬度 if gridv...
easyui treegrid 超過列寬自動換行
專案中有使用 treegrid 在內容超出列寬後,超出的內容不可見,如下圖 經查詢得知easyui有個自動換行的屬性 nowrap false,新增 後仍未得到想要的效果,下面是新增後的樣式 文字仍為換行,審查元素後,新增了如下樣式 tree title文字是換行了,然而。好像效果仍然不如人意,後面...
EasyUI的datagrid列寬度自動增加問題
問題 多次使用 dg datagrid hidecolumn operation 和 dg datagrid showcolumn operation 時,出現寬度不斷增加 原因 可能是fitcolumns導致 解決辦法 把fitcolumns設為 false,寬度用百分比 用 dg datagri...