在
DropDownList ddl = new DropDownList();
后面加上:
ddl.ID = "ddl";然后在UpdateCommand中用:
DropDownList ddl = (DropDownList)e.Item.FindControl("ddl");
DropDownList ddl = new DropDownList();
后面加上:
ddl.ID = "ddl";然后在UpdateCommand中用:
DropDownList ddl = (DropDownList)e.Item.FindControl("ddl");
你还可以从你的数据源的里面来提取column的name,再用遍历的方法来对比dg里面有没有,有就取出来,没有跳过。
只是介绍一个方法,代码试试看。
在添加模板列时改用DataGrid.Columns.AddAt(place,Column)后可以改变模板列的位置,但此时点击编辑按钮,出现指定的转换无效,我想是不是EditTemplate没有设置的关系,然后设置了EditTemplate为同样的模板列,但问题依然,只有用Add(Column)默认加在所有列之后没有问题.
但此时采用icyer大侠的方法在模板列InstantiateIn函数中为添加的控件增加id属性,在DataGrid中的UpdateCommand事件中使用FindControl(id)后引用就会出错.
多谢各位指点
ddl.DataValueField = ((DataRowView)container.DataItem)[dataValueField].ToString();
ddl.DataBind();
??
根据数据源指定要绑定的Column???
你看到你输出的DDL有值么???
string data1,data2 ;
int iTemp = ((DataRowView) container.DataItem).DataView.Table.Rows.Count;
for (int i=0; i<iTemp; i++)
{
data1 = ((DataRowView) container.DataItem).DataView.Table.Rows[i][dataTextField].ToString();
data2 = ((DataRowView) container.DataItem).DataView.Table.Rows[i][dataValueField].ToString();
ddl.Items.Add(new ListItem(data1,data2));
}
然后就没有用ddl.DataBind()了,但的确得到了绑定要的效果
((TemplateColumn)DataGrid1.Columns[i]).ItemTemplate=new DropDownListItem();么???DropDownListItem这个名字真不好。。----------------------
把你指定ITemplate的代码帖出来吧。
TemplateColumn tc = new TemplateColumn();
DropDownListItem ddli = new DropDownListItem();
ddli.DataTextField = "column3";
ddli.DataValueField = "column3";
tc.ItemTemplate = ddli;
tc.EditItemTemplate = ddli;
DataGrid1.Columns.Add(tc);
哪里啊??
OnInit还是???OnLoad,还是其他地方?
把它放到protected override OnInit(EventArgs e)
里去。
否则PostBack时,你的DDL什么值都没有
但有点不明白,指定Itemplate时不管是不是postback都有添加模板列,为什么就不行呢?
还有个问题
模板列InstantiateIn函数中为添加的控件增加id属性,在DataGrid中的UpdateCommand事件中使用FindControl(id)后引用就会出错:未将对象引用设置到对象的实例.
多谢指点
一:根据数据源绑定DataGrid,
二:根据ViewState恢复视图。
LoadViewState是在OnInit后,OnLoad前执行的。
如果你在OnLoad时才调用InstantiateIn,那么你的控件部分将不能得到恢复。你的第二个问题看情况了。。
e.Item是DataGridItem,是INamingContainer的实现者。应该可以把你的ddl搜索出来才对的。你可能在某些细节上没有做对。
检查你出错的地方。看看到底是什么东西为null了。。