как получить идентификатор выбранного элемента в списке с помощью winforms c # - PullRequest
0 голосов
/ 23 августа 2011

У меня есть список (lstcategories) .. заполненный элементами, поступающими из базы данных с использованием приведенного ниже кода ...

     private void getcategorynames()
     { 
        var categorytypes = (from categories in age.categories
                       select categories.category_Name).ToList();


        foreach (string  item in categorytypes)
        {

            listcategories.Items.Add(item);


        }

моя проблема в том, что если я нажму на элемент в списке, мне нужно что-то сделать .. вот так

если я нажимаю на название категории (элемент списка), мне нужно передать имя выбранной категории в базу данных

Может ли кто-нибудь помочь с этим ...

Ответы [ 4 ]

2 голосов
/ 23 августа 2011

ListBox.Items представляет собой набор объектов, поэтому вы можете хранить сам объект категории вместо строкового его представления.

age.Categories.ToList().ForEach((c) => listcategories.Items.Add(c));

Затем в ListBox.SelectedIndexChanged

Category category = (Category)listcategories.SelectedItem;
// Do something with category.Id

Если вы хотите сделать все это встроенным

private void getcategorynames() {
    age.Categories.ToList().ForEach((c) => listcategories.Items.Add(c));
    listcategories.SelectedIndexChanged += (sender, e) => {
        Category category = (Category)listcategories.SelectedItem;
        // Do something with category.Id
    };
}
0 голосов
/ 24 марта 2018

Создать свойство для использования в качестве ListBoxItem

class Group
    {
        private string _name;
        private string _id;

        public Group(string name, string id)
        {
            _name = name;
            _id = id;
        }

        public override string ToString()
        { return _name; }

        public string id
        {
            get { return _id; }
        }

        public string name
        {
            get { return _name; }
        }

    }

Добавить элемент в список

lbAvailableGroups.Items.Add(new Group(ds.Tables[0].Rows[i][1].ToString(), ds.Tables[0].Rows[i][0].ToString()));
}

Получить идентификатор и имя предмета

            Group p = (Group)lbUserGroups.SelectedItem;
            int GroupId = Convert.ToInt32(p.id);
            string GroupName = p.name
0 голосов
/ 23 августа 2011

Может быть, это поможет:

  DataTable table = new DataTable();
    public Form1()
    {
        InitializeComponent();

        //you fill the table from database, I will show you my example (becuase I dont have dataBase)!
        table.Columns.Add("CategoryID", typeof(int));
        table.Columns.Add("CategoryName", typeof(string));
        table.Rows.Add(1, "name 1"); 
        table.Rows.Add(2, "name 2");
        table.Rows.Add(3, "name 3");

        listBox1.DataSource = new BindingSource(table, null);
        listBox1.DisplayMember = "CategoryName";
        listBox1.ValueMember = "CategoryID";
    }

    private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (listBox1.SelectedIndex > -1)
        {
            DataRowView data = listBox1.SelectedItem as DataRowView;
            int id = int.Parse(data["CategoryID"].ToString());
            string name = data["CategoryName"].ToString();
        }
    }
0 голосов
/ 23 августа 2011

Сделай что-нибудь подобное.когда вы получите выбранный элемент списка, он будет иметь тип Cat, который содержит идентификатор и имя категории.

 public class Cat
    {
          public int Id { get;set;}
          public string Name { get;set;}

         public override string ToString()
         {
             return this.Name;
          }

    }

    private void getcategorynames()
         { 
            var categorytypes = (from categories in age.categories
                           select categories.category_Name).ToList();

listcategories.SelectedIndexChanged += new EventHandler(listcategories_SelectedIndexChanged);

            foreach (var c in categorytypes.select(p=> new Cat { Id = p.category_Id, Name = p.category_Name}))
            {

                listcategories.Items.Add(c);


            }

void listcategories_SelectedIndexChanged(object sender, EventArgs e)
        {
            Cat selected = (Cat)(sender as ListBox).SelectedItem;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...