我在获取所选索引和ListBox的选定值时遇到问题。我试图用数据库中的值填充列表框,然后,在选定的索引更改事件,我无法提取选定的索引和选定的值。相反,我得到一个选定的索引-1,所选的值不包含值。
以下是点击ListBox中任何项目之前的屏幕截图:
这是点击项目后拍摄的屏幕截图:
这是c#代码:
public partial class std_Course_dashboard : System.Web.UI.Page
{
int index;
string value;
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = Session["uid"].ToString();
Label2.Text = Session["crs_id"].ToString();
ListBox1.Items.Clear();
SqlDataReader r;
SqlCommand cmd = new SqlCommand("select lecture_text, lecture_Title,lecture_No from Lecture where course_ID='" + Convert.ToInt32(Session["crs_id"]) + "'", con);
con.Open();
ListBox1.DataSource = cmd.ExecuteReader();
ListBox1.DataTextField = "lecture_Title";
ListBox1.DataValueField = "lecture_No";
ListBox1.DataBind();
con.Close();
ListBox1.Items.Insert(0, new ListItem("--Select Customer--", "0"));
}
protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
value = ListBox1.SelectedValue;
index = ListBox1.SelectedIndex;
Label3.Text = value;
Label4.Text = index.ToString();
}
}
答案 0 :(得分:3)
这是因为每次页面发出请求时清除项目
ip <- ggplot(data=daf, aes(x=temp, y=diam, colour = iso)) +
geom_point() + facet_wrap(~iso)
ip + geom_smooth(method = "nls",
method.args = list(formula = y ~ thy * exp(thq * (x-thx)^2 + thc * (x - thx)^3),
start = list(thy=5.4, thq=-0.01, thx=25, thc=0.0008)),
se = F, size = 0.5, data = subset(daf, iso=="Itiquira")) +
geom_smooth(method = "nls",
method.args = list(formula = y ~ thy * exp(thq * (x-thx)^2 + thc * (x - thx)^3),
start = list(thy=5.4, thq=-0.01, thx=25, thc=0.0008)),
se = F, size = 0.5, data = subset(daf, iso=="Londrina")) +
geom_smooth(method = "nls",
method.args = list(formula = y ~ thy * exp(thq * (x-thx)^2 + thc * (x - thx)^3),
start = list(thy=5.4, thq=-0.01, thx=25, thc=0.0008)),
se = F, size = 0.5, data = subset(daf, iso=="Sinop"))
您可以删除此行代码并添加ListBox1.Items.Clear();
,以便仅在页面加载时第一次加载数据
if(!IsPostBack)
答案 1 :(得分:2)
如果在Page_Load中放置一个断点,您会发现它在每一个PostBack上都会出现。由于这种情况发生,您的代码被设计为每次PostBack时ListBox都会反弹数据 - 包括在ListBox中选择新索引时。这就是导致SelectedIndex重置的原因。
您需要做的只是绑定ListBox一次。您可以通过检查Page.IsPostBack条件来实现此目的。如果PostBack不是由客户端引起的,请绑定ListBox。
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
Label1.Text = Session["uid"].ToString();
Label2.Text = Session["crs_id"].ToString();
ListBox1.Items.Clear();
SqlDataReader r;
SqlCommand cmd = new SqlCommand("select lecture_text, lecture_Title,lecture_No from Lecture where course_ID='" + Convert.ToInt32(Session["crs_id"]) + "'", con);
con.Open();
ListBox1.DataSource = cmd.ExecuteReader();
ListBox1.DataTextField = "lecture_Title";
ListBox1.DataValueField = "lecture_No";
ListBox1.DataBind();
con.Close();
ListBox1.Items.Insert(0, new ListItem("--Select Customer--", "0"));
}
}