2011-05-18 96 views
0

我使用这个代码将数据添加到我的列表框:C#的SelectedValue在ListBox

SqlCommand cmd1 = new SqlCommand("SELECT U_Naam, U_Voornaam, User_ID FROM Login ORDER BY U_Naam ASC", con); 
    dr = cmd1.ExecuteReader(); 

    int teller = 0; 

    while (dr.Read()) 
    { 
     hulp = dr["U_Naam"].ToString() + " " + dr["U_Voornaam"].ToString(); 
     lbNiet.Items.Add(hulp); 
     lbNiet.Items[teller].Value = dr["User_ID"].ToString(); 
     teller++; 
    } 

当我运行该程序,并在列表中选择我想要得到它的价值(使用的SelectedValue)的项目。当我这样做时,它总是给出一个nullref(没有值)。我已经阅读了某个地方选择的项目后回传丢失?我该如何解决这个问题?

谢谢!

回答

2

我不认为在正常情况下PostBack后选定的项目会丢失 - 我的猜测是您在PostBack后意外地填充了ListBox,这样当您做出选择时,系统会击中Page_Init/Page_Load(或无论您选择哪个事件来填充ListBox)并重新创建所有选项。这样做会覆盖当前选择的选项。

如果是这种情况,可以通过在重新填充列表之前首先检查PostBack来轻松避免。

+0

我没有使用page_load或init填充列表,我在gridview中选择了一个项目之后做了这个(selectedindexchanged) – Nico 2011-05-18 12:24:37

+0

你在哪里填充列表然后? – Streklin 2011-05-18 12:25:52

+0

我有一个gridview在我显示多项目,当我点击选择按钮(选择一个项目),我填充列表框。 - >使用indexchanged – Nico 2011-05-18 12:28:48

1

您是否正在ASP.NET页面的加载中运行该代码而未检查其是否为Postback?如果您在加载页面时执行此操作,则应确保将加载代码封装在if (!IsPostback) {}块中。

+0

代码位于gridview后面(selectedindexchanged) – Nico 2011-05-18 12:23:24

0

数据绑定您的数据,而不是在循环中添加将有所帮助。

+0

未使用数据绑定c ouse我需要结合2件事情来显示在列表框中 – Nico 2011-05-18 12:28:12

0

您是否正在使用ViewState处理页面?

如果是,请检查页面的IsPostBack属性,并且不要在回发后填充您的列表。

2

更换这些线路

lbNiet.Items.Add(hulp); 
lbNiet.Items[teller].Value = dr["User_ID"].ToString(); 

lbNiet.Items.Add(new ListItem(hulp,dr["User_ID"].ToString();)); 
0

可以使用Request.Form找到贴值
或者我认为,如果你使用一个ScriptManager和一个UpdatePanel它后重新填充盒回发