[英]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。 您不能使用SelectedIndex
从SelectedItems
获取项目
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.