Listview中的选择行选择列表视图中的最后一行,而不是我选择的行

时间:2016-11-22 16:37:57

标签: c# asp.net

在aspx页面中,我有一个Listview,每行都有一个选择按钮。单击选择按钮时,它会选择该行,但它始终从列表视图中的最后一行获取数据,而不是Im选择的那一行。

controlid是GetDeadline方法的一个参数,它调用存储过程来选择controlid列等于controlid参数的行。

    protected void ListView1_SelectedIndexChanging(object sender, ListViewSelectEventArgs e)
    {
        try
        {
            foreach (ListViewItem item in ListView1.Items)
            {
                Label mylabel = (Label)item.FindControl("ControlIDLabel");
                Session["controlid"] = mylabel.Text;
            }

            controlid = Session["controlid"].ToString();

            Deadline newdeadline = Deadline.GetDeadline(controlid);

            Bind();
        }
        catch (Exception ex)
        {
            lblStatus.Text = ex.Message;
        }
    }

还有我的意思的另一个例子:

ControlID | Name      | 
---------------------------------
1           Row One     Select
2           Row Two     Select
3           Row Three   Select
4           Row Four    Select

无论我选择哪一行,mylabel.Text =" 4"。

如何从正确的行获取数据?

1 个答案:

答案 0 :(得分:0)

您必须获取所选项目,并在此项目中找到您的标签。如果您在循环foreach中搜索标签,则始终将Session["controlid"]最后一个标签文本设置为值。尝试使用此代码。

您可以在此处找到有关ListView.SelectedIndexChanging Event

的更多信息
protected void ListView1_SelectedIndexChanging(object sender, ListViewSelectEventArgs e)
        {
            try
            {
               ListViewItem item = (ListViewItem)ProductsListView.Items[e.NewSelectedIndex];
               Label mylabel = (Label)item.FindControl("ControlIDLabel");
               Session["controlid"] = mylabel.Text;


                controlid = Session["controlid"].ToString();

                Deadline newdeadline = Deadline.GetDeadline(controlid);

                Bind();
            }
            catch (Exception ex)
            {
                lblStatus.Text = ex.Message;
            }
        }