2012-09-18 28 views
1

我的问题是这样的:我有一个GridView与列表对象作为其数据源,它绑定没有问题。我有一个DropDownList,它有事件SelectedIndexChanged,并且在这个事件中我添加了一个新的对象到列表中,添加完后我想做一个GridView1.Databind(),这样新的对象出现在GridView中。GridView.Databind()不与对象列表

但是,这不起作用,我做GridView1.Databind()后,来自GridView的数据会丢失。它甚至显示EmptyDataText,但如果我刷新页面,一切都会出现。此外,DropDownList使用一个对象列表作为DataSource,并应该使用DropDownList1.Databind(),但它不起作用。它在DataBinding之后有相同的数据,我至少要修改DropDownList的方法是手动重新设置DropDownList.DataTextField = object.attribute1DropDownList.DataValueField = object.attribute2。但有了GridView,我被卡住了,有人能解释方法DataBind如何与对象列表一起工作吗?

+0

什么是绑定GridView? – alexm

+0

到对象列表中,它没有问题,它正确显示所有数据,唯一的问题是试图刷新它 –

+0

你可以发布一些你的代码吗? – cptScarlet

回答

1

刷新一个asp:GridView绑定到一个列表,首先设置gridView.DataSource属性。

gridView.DataSource = mylist; 
gridView.DataBind(); 

对于非数据库数据,这意味着列表本身必须保存在会话变量或ViewState中。

+0

每次我需要做'gridView.Databind()'我需要这样做吗?我已经在'PageLoad()'中做了这个。在使用这个列表之前,我的系统使用了MySqlDataSource,但是现在我们使用ADO.net出于安全原因,而使用MySqlDataSource,您只需将GridView的DataSource关联一次。顺便说一句,谢谢你的答案,它的工作原理。 –

+0

我敢打赌你正在使用* DataSourceID *属性的MySqlDataSource。这实际上只能分配一次。另一方面,DataSource不是持久化的,每个回发都将它设置为null – alexm

+0

就是这样,谢谢你的回答,只是创建了一个名为'GridView2Databind()'的方法,它包含这两行,因为我的代码创建对象列表来自一个类e来调用它我需要使用'GridView2.DataSource = emit_bo.GetEmitenteTipo(Convert.ToInt32(GridView1.SelectedValue));' 我会不容易写这一切,每次我需要做一个数据绑定。请注意,代码有点复杂,因为一个gridview取决于另一个gridview,没有发布任何与之相关的东西,因为认为它会变得更难以忍受。 –

0

我记得很久以前有这个问题。我猜这个问题是你没有在UpdatePanel中的GridView。

如果是这样,GridView将不会立即刷新并显示更改。关于下拉菜单的位置有一些技巧(我认为它也必须位于面板中),但我相信你可以在UpdatePanel上快速搜索一下。

+0

感谢您的推荐,不知道这个更新面板,非常有用,但没有修复它 –