Gridview具有带ObjectDataSource的动态列,不会在回发时保持viewstate。
以下是我遵循的步骤: -
1)在aspx上,我将GridView DataSourceID设置为ObjectDataSource(ObjectContainerDataSource是特定的)
2)在页面加载时,我添加了一个动态列,其中包含GridView的复选框以及其他集合数据。 (不在里面!回发条件)。
3)添加Gridview Columns后,我使用上面的Collection初始化ObjectDataSource的DataSource属性。
现在,GridView第一次显示数据以及动态复选框列。
但是当我尝试在按钮点击事件中找到所选复选框时,它会显示所有复选框都为false。 (不保留复选框状态)。
注意: - 上面的代码在没有ObjectDataSource的情况下工作正常。 (我刚刚更换了数据源,所有代码都完好无损)。我猜,它引起了GridView.DataBind()。
代码段: -
protected void Page_Load(object sender, EventArgs e)
{
CreateDynamicGridColumns(ref GridView gridView, ref ObjectContainerDataSource dataObjectSource, List<DataField> DataFields);
this.dataObjectSource.DataSource = dataSource;
}
public static void CreateDynamicGridColumns(ref GridView gridView, ref ObjectContainerDataSource dataObjectSource, List<DataField> DataFields)
{
foreach (DataField oField in DataFields)
{
TemplateField tf = new TemplateField();
// create the data rows
tf.ItemTemplate =
new GridViewTemplate(DataControlRowType.DataRow, resources, oField, HostPage);
// create the header
tf.HeaderTemplate =
new GridViewTemplate(DataControlRowType.Header, resources, oField, HostPage);
// add to the GridView
tf.EditItemTemplate =
new GridViewEditTemplate(DataControlRowType.DataRow, resources, oField, HostPage);
gridView.Columns.Add(tf);
}
dataObjectSource.DataSource = datasource;
}
请提供一些帮助。提前谢谢......