2009-11-26 61 views
0

我有一个绑定到对象数据源的listView控件。在ListView1_ItemDataBound事件中,我正在生成一些动态控件。我这样做是因为这取决于特定的列值,我可能需要生成文本框,单选按钮,复选框等ListView -Dynamic Controls和DataPager事件

一些代码在这里:

ListViewDataItem item = (ListViewDataItem)e.Item; 
typez = Convert.ToInt32(DataBinder.Eval(item.DataItem,"Type").ToString()); 
if (typez == 1) //1 means generate radibutton 
      { 

       string[] options = DataBinder.Eval(item.DataItem, "QuestionDetail").ToString().Split(new string[] { delimiter }, StringSplitOptions.None); 
       questionID = Convert.ToInt32(DataBinder.Eval(item.DataItem, "Question_ID").ToString()); 

       int optionCount = 1; 
       RadioButtonList rbl = new RadioButtonList(); 

       //set ID for the radiobtnList to the questionid no. 
       rbl.ID = "mcq_" + questionID; 

       foreach (string s in options) 
       { 
        //adds the MCQ options to list item 
        ListItem li = new ListItem(Util.GetAlphabet(optionCount).ToUpper() + ". " + s, Util.GetAlphabet(optionCount).ToUpper(), true); 
        rbl.Items.Add(li); 

        optionCount++; 
       } 
       //PlaceHolder PlaceHolder1 = (PlaceHolder)e.Item.FindControl("PlaceHolder1"); 

       PlaceHolder1.Controls.Add(rbl); 

我DataPager的也。当我转到下一页时,我想以某种方式捕获上一页中的用户响应。否则,所有的用户响应都会丢失。我尝试使用ListView1_PagePropertiesChanging事件。但在这里,我似乎没有得到页面中的动态控件。

我需要获取单选按钮的选定值,以便我可以保存它或放入某个会话变量,以便用户返回到此页面时可以看到他的先前值。

有人能请建议一些见解我做错了什么。

回答

0

问题是您必须在OnInit中创建控件,然后ViewState persister才能完成它的工作。如果在OnInit之后执行,在ItemDataBound中,当触发Postback时,控件不存在且其视图状态未反序列化。
要访问单选按钮的值并获取选定的值,您必须查看Request.Form字典并找到它。