datagrid 繫結動態列

2022-03-22 01:17:15 字數 4259 閱讀 9128

如題, 許多時候我們渴望繫結乙個不確定的列到datagrid,

如果你真想這樣那麼10分鐘後你將實現,

缺點是你不可能在datagrid的一行中得到乙個完整的類了.

她借助了乙個國外的原始碼類,datagriddatasource.cs

**:

using

system;

using

system.collections;

using

system.collections.generic;

using

system.windows.controls;

using

datagriddatasource;

namespace

gridtestsilverlight

public

ienumerable

<

idictionary

>

generatedata(

string

xml)

yield

return

dict;}}

}}/*我自己實際工程中用到的.

* 資料格式為

* * 《時間》2011-3-14 10:21:52

* * 《時間》2011-3-19 10:21:52

* private ienumerablegeneratedata(xdocument xml)

yield return dict;}}

* */

datagriddatasource.cs  類

對於此檔案, 類中注釋部分為原始碼,注釋下方是我新增的,不難看出是為了能夠讓datagrid的表頭出現中文.

自此皆大歡喜.  我用到了我想用的.

using

system;

using

system.collections;

using

system.collections.generic;

using

system.reflection;

using

system.reflection.emit;

using

system.text;

using

system.text.regularexpressions;

namespace

datagriddatasourceif(

!hasdata);}

if(firstdict

==null

)string

typesigniture

=gettypesigniture(firstdict);

type objecttype

=gettypebytypesigniture(typesigniture);

if(objecttype

==null

)else

}objecttype

=tb.createtype();

_typebysigniture.add(typesigniture, objecttype);

}return

generateenumerable(objecttype, list, firstdict);

}private

static

type gettypebytypesigniture(

string

typesigniture)

private

static

type getvaluetype(

object

value)

private

static

string

gettypesigniture(idictionary firstdict)_"

, pair.key, getvaluetype(pair.value));

}return

sb.tostring().gethashcode().tostring().replace("-

", "minus");

}private

static

ienumerable generateenumerable(

type objecttype, ienumerable

<

idictionary

>

list, idictionary firstdict)

);var listofcustom

=activator.createinstance(listtype);

foreach

(var currentdict

inlist)

var row

=activator.createinstance(objecttype);

foreach

(dictionaryentry pair

infirstdict)

catch

property.setvalue(

row,

value,

null);}

}listtype.getmethod(

"add

").invoke(listofcustom,

new );

}return

listofcustom

asienumerable;

}private

static

typebuilder gettypebuilder(

string

typesigniture)

private

static

void

createproperty(

typebuilder tb,

string

propertyname, type propertytype));}

fieldbuilder fieldbuilder

=tb.definefield("_

"+propertyname,

propertytype,

fieldattributes.private);

propertybuilder propertybuilder

=tb.defineproperty(

propertyname, propertyattributes.hasdefault, propertytype,

null

);methodbuilder getpropmthdbldr

=tb.definemethod(

"get_"+

propertyname,

methodattributes.public

|methodattributes.specialname

|methodattributes.hidebysig,

propertytype, type.emptytypes);

ilgenerator getil

=getpropmthdbldr.getilgenerator();

getil.emit(opcodes.ldarg_0);

getil.emit(opcodes.ldfld, fieldbuilder);

getil.emit(opcodes.ret);

methodbuilder setpropmthdbldr

=tb.definemethod(

"set_"+

propertyname,

methodattributes.public

|methodattributes.specialname

|methodattributes.hidebysig,

null

, new

type );

ilgenerator setil

=setpropmthdbldr.getilgenerator();

setil.emit(opcodes.ldarg_0);

setil.emit(opcodes.ldarg_1);

setil.emit(opcodes.stfld, fieldbuilder);

setil.emit(opcodes.ret);

propertybuilder.setgetmethod(getpropmthdbldr);

propertybuilder.setsetmethod(setpropmthdbldr);}}

}

如何取得DataGrid繫結列和模板列中的值

有的時候想取不是編輯狀態的值,這個時候通常會使用模板列中放置textbox通過e.item.findcontrol取值,有的問為什麼取不到?這要看你前台的列怎麼寫的了,下面分別寫出四種情況和這四種情況下面的取值方式 1 asp datagrid id datagrid1 runat server a...

easyUi的dataGrid動態改變列 列標題等

easyui的datagrid動態改變列 列標題等。參考官方文件 其中說明 請記住,我們已經定義了其他屬性,比如 url width height 等等。我們不需要再一次定義它們,我們定義那些我們需要改變的。實際 function initlist onbeforeload function par...

Flex 動態調整DataGrid列的顯示

當datagrid需要呈現n多列的時候,要麼列顯示不全都擠在一起,要麼就出現橫向的滾動條。這些感覺都不和諧。那麼實現的方案有幾種 1 給每列加個id,然後用別的控制項 例如combobox 來控制每列顯示,來開關列的顯示和隱藏,類似js那樣的做法,但那樣 量太大,寫通用的方法也太麻煩了。2 基於上面...