我正在使用以下代码将数据添加到我的列表框中:
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(没有值)。我在某个地方看过所选项目在回发后丢失了吗?我该如何解决这个问题?
谢谢!
答案 0 :(得分:2)
我不认为在正常情况下PostBack之后所选项目会丢失 - 我的猜测是你在PostBack之后意外地再次填充ListBox,这样当你做出选择时,系统会点击Page_Init / Page_Load(或者其他)您选择填充ListBox的事件并重新创建所有选项。这样做会覆盖当前选择的选项。
如果是这种情况,可以通过在重新填充列表之前先检查PostBack来轻松避免。
答案 1 :(得分:2)
替换这些行
lbNiet.Items.Add(hulp);
lbNiet.Items[teller].Value = dr["User_ID"].ToString();
与
lbNiet.Items.Add(new ListItem(hulp,dr["User_ID"].ToString();));
答案 2 :(得分:1)
您是否在“加载ASP.NET”页面中运行该代码而未检查它是否为回发?如果您在加载页面时执行此操作,则应确保将加载代码包装在if (!IsPostback) {}
块中。
答案 3 :(得分:0)
数据绑定而不是添加循环将有所帮助。
答案 4 :(得分:0)
您是否在页面中使用ViewState?
如果是,请检查页面的IsPostBack属性,并且不要在回发后填充列表。
答案 5 :(得分:0)
您可以使用Request.Form查找发布值
或者我认为如果您使用scriptmanager和updatepanel,它会在回发后重新填充该框