DataGrid列寬隨著內容自動變化

2022-03-19 17:22:56 字數 2486 閱讀 6046

//自動調整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...