Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET Listview.selectedindex属性变得疯狂_Asp.net_Listviewitem - Fatal编程技术网

ASP.NET Listview.selectedindex属性变得疯狂

ASP.NET Listview.selectedindex属性变得疯狂,asp.net,listviewitem,Asp.net,Listviewitem,我正在从listview中删除单个数据库记录,删除后,我尝试使用listView1.selectedindex属性在listview中导航,但我注意到它突出显示了不正确的记录,例如,我将listView1.selectedindex设置为1,但它显示了索引为0的记录。怎么了?请帮忙 protected void deleteButton_Click(object sender, EventArgs e) { int id = int.Parse(((Label)ListView1.Ite

我正在从listview中删除单个数据库记录,删除后,我尝试使用listView1.selectedindex属性在listview中导航,但我注意到它突出显示了不正确的记录,例如,我将listView1.selectedindex设置为1,但它显示了索引为0的记录。怎么了?请帮忙

protected void deleteButton_Click(object sender, EventArgs e)
{
    int id = int.Parse(((Label)ListView1.Items[ListView1.SelectedIndex].FindControl("idLabel")).Text);

    using (SqlConnection conn = new SqlConnection(connStr))
    {
        string Sql = "delete from Employee where id = @id";
        conn.Open();
        using (SqlCommand dCmd = new SqlCommand(Sql, conn))
        {
            dCmd.Parameters.AddWithValue("@id", id);
            dCmd.ExecuteNonQuery();
        }
        conn.Close();
    }
    BindDataFromBaseToListView();
}
BindDataFromBaseToListView方法看起来是这样的:

private void BindDataFromBaseToListView()
{
    using (SqlConnection conn = new SqlConnection(connStr))
    {
        conn.Open();
        using (SqlDataAdapter dAd = new SqlDataAdapter("select * from Employee", conn))
        {
            DataTable dTable = new DataTable();
            dAd.Fill(dTable); 

            ListView1.DataSourceID = null;
            ListView1.DataSource = dTable;
            ListView1.DataBind();
        }
        conn.Close();
  }
不使用deleteButton\u Click事件,您可以使用ListView的OnItemCommand事件获取所选行值并删除所需的项,如下面的代码所示:

protected void ListView1_ItemCommand(object sender, ListViewCommandEventArgs e)
{
    if (e.CommandName == "delete")
    {
        int id = 0;
        if(int.TryParse((e.Item.FindControl("idLabel") as Label).Text, out id))
        {
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                string Sql = "delete from Employee where id = @id";
                conn.Open();
                using (SqlCommand dCmd = new SqlCommand(Sql, conn))
                {
                    dCmd.Parameters.AddWithValue("@id", id);
                    dCmd.ExecuteNonQuery();
                }
                conn.Close();
            }
            BindDataFromBaseToListView();
        }
    }
}
控件上的元素将如下所示:

<asp:ListView ID="ListView1" runat="server" OnItemCommand="ListView1_ItemCommand" .. >
     ...
     <ItemTemplate>
         <asp:Button runat="server" CommandName="delete" Text="Delete" ID="DeleteButton" />

     ...
如果你还有问题,请告诉我