如題, 許多時候我們渴望繫結乙個不確定的列到datagrid,
如果你真想這樣那麼10分鐘後你將實現,
缺點是你不可能在datagrid的一行中得到乙個完整的類了.
她借助了乙個國外的原始碼類,datagriddatasource.cs
**:
usingdatagriddatasource.cs 類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;}}
* */
對於此檔案, 類中注釋部分為原始碼,注釋下方是我新增的,不難看出是為了能夠讓datagrid的表頭出現中文.
自此皆大歡喜. 我用到了我想用的.
usingsystem;
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 基於上面...