2016-05-29 3 views
0

Итак, у меня есть этот код. Я хочу удалить из базы данных, когда я выбираю строку в ListView. Моя идея - удалить из таблицы с выбранным ID. Я пробовал с listViewScenarist.SelectedItems[0].SubItems[0], но код не распознает SubItems[0]. Что я могу сделать?ListView C# WPF Binding

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 [email protected]", connection); 
    int x = Convert.ToInt32(listScenarist.SelectedIndex); 
    cmd.Parameters.AddWithValue("@idScenarist", listViewScenarist.SeletedItems[x].SubItems[0]); 
    cmd.ExecuteNonQuery(); 
    connection.Close(); 
} 

Populate:

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(); 
} 
+0

Вы пробовали listViewScenarist.Items [x] ?? – apomene

+0

@LeonardH Я не знаю, как вы заполняете список, но 'SelectedItem (s)' должен быть у вас типа item так: '(listViewScenarist.SeletedItems [x] как UserScenarist) .idScenarist' – dkozl

ответ

0

Это очень мало связано с привязкой, но ваша первая проблема заключается в том, что каждый раз, когда вы добавляете 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

+0

Работал !!! Спасибо чувак. –

0

Чтобы найти idScenarist вы можете просто бросить listViewScenarist.SelectedItem к вашей модели UserScenarist затем получить выбранный idScenarist как это:

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

Тогда:

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

Не работает .. ОШИБКА: "В экземпляре объекта не задана ссылка на объект." –

+0

@LeonardH ... Сначала вы должны выбрать элемент в своем «ListView», а затем вызвать метод deleteScenarist. –

+0

Как? Напиши мне, как я это сделал. Может быть, я что-то не так. –