繁体   English   中英

ListView C#WPF绑定

[英]ListView C# WPF Binding

所以我有这段代码。 当我在ListView选择一行时,我想从数据库中删除。 我的想法是从具有选定ID的表中删除。 我尝试使用listViewScenarist.SelectedItems[0].SubItems[0]但是代码无法识别SubItems[0] 我能做什么?

public class UserScenarist : Scenarist
{
    public int idScenarist { get; set; }
    public string numeScenarist { get; set; }
}

public void deleteScenarist(System.Windows.Controls.ListView listScenarist)
{
    connection.Open();
    SqlCommand cmd = new SqlCommand("DELETE FROM dbo.Scenarist WHERE idScenarist=@idScenarist", connection);
    int x = Convert.ToInt32(listScenarist.SelectedIndex);
    cmd.Parameters.AddWithValue("@idScenarist", listViewScenarist.SeletedItems[x].SubItems[0]);
    cmd.ExecuteNonQuery();
    connection.Close();
}

填充:

public void loadScenarist(System.Windows.Controls.ListView listScenarist)
{
    connection.Open();
    SqlCommand cmd = new SqlCommand("SELECT * FROM dbo.Scenarist ORDER BY idScenarist ASC", connection);

    try
    {
        SqlDataAdapter da = new SqlDataAdapter();
        da.SelectCommand = cmd;
        DataTable dt = new DataTable();
        da.Fill(dt);
        listScenarist.Items.Clear();
        foreach (DataRow dr in dt.Rows)
        {  
            List<UserScenarist> items = new List<UserScenarist>();
            items.Add(new UserScenarist() { idScenarist = Int32.Parse(dr["idScenarist"].ToString()), numeScenarist = dr["scenarist"].ToString() });
            //System.Windows.MessageBox.Show(dr["idScenarist"].ToString());
            listScenarist.Items.Add(items);
        }
    }
    catch (Exception ex)
    {
        System.Windows.MessageBox.Show(ex.Message);
    }
    connection.Close();
}

要找到idScenarist您可以将listViewScenarist.SelectedItem投射到您的UserScenarist模型中,然后像下面这样选择idScenarist

int idScenarist = (listViewScenarist.SelectedItem as UserScenarist).idScenarist;

然后:

cmd.Parameters.AddWithValue("@idScenarist", idScenarist);

这与绑定关系不大,但是您的第一个问题是,每次添加只有一个项目的List<UserScenarist>作为项目。

而是创建一个列表,将项目添加到该列表,然后使用该列表设置ItemsSource

var items = new List<UserScenarist>();
foreach (DataRow dr in dt.Rows)
{  
    items.Add(new UserScenarist() { 
                 idScenarist = Int32.Parse(dr["idScenarist"].ToString()), 
                 numeScenarist = dr["scenarist"].ToString() 
             });
}
listScenarist.ItemsSource = items;

如果按上述方法修复,则可以将SelectedItem(s)UserScenarist

var selectedId = (listViewScenarist.SeletedItem as UserScenarist).idScenarist; 

要么

var selectedId = (listViewScenarist.SeletedItems[x] as UserScenarist).idScenarist; 

还有,你的代码

int x = Convert.ToInt32(listScenarist.SelectedIndex);
listViewScenarist.SeletedItems[x]

将无法正常工作,并且几乎所有时间都将超出范围异常。 SelectedIndex对于所有项目都是全局的,范围从0到项目数-1。但是SelectedItems仅具有选定的项目,因此它的长度范围从0到所选项目数-1。 您不能使用SelectedIndexSelectedItems获取项目

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM