Как получить данные из определенного столбца выбранных элементов в ObjectListView? - PullRequest
0 голосов
/ 07 мая 2019

У меня есть ObjectListView, и мне нужно получить значение определенного столбца строки, по которой щелкнули.

Например:

Imgur (я бы поместил изображение здесь напрямую, но у меня нет репутации, чтобы сделать это.)

Мне нужно получить идентификатор из строки, на которую я нажал (неНеважно, где в строке я щелкнул - я имею в виду, какой столбец в строке).

Спасибо.

Ответы [ 2 ]

1 голос
/ 07 мая 2019

Используйте событие SelectionChanged и получите доступ к соответствующему свойству вашего модельного объекта оттуда. Предполагая, что ваш класс модели называется MyDataObject :

    private void olv_SelectionChanged(object sender, EventArgs e) {
        if (olv.SelectedObject is MyDataObject data) {
            // Access data.Id or whatever else you need
        } 
    }
0 голосов
/ 07 мая 2019

Для ясности моего ответа я предоставил вам полный рабочий пример.В этом примере создаются примеры данных, представление сетки данных, форма окон, а затем отображается форма окон.Затем он реагирует на щелчок мыши, который отображает MessageBox для отображения идентификатора выбранной строки.

Я предполагаю, что вы используете DataGridView для отображения своих данных и что данные представлены в массиве или спискеобъектов.Это также можно сделать с помощью DataSet с DataTable, но для простоты я использую массив объектов.

Код, который отвечает на ваш прямой вопрос, находится в обработчике события MouseClick, где он устанавливает переменную selectedObject:

void Main()
{
    var data = new[] {
        new MyData { Id = 1, Typ = "Prichozi", Castka =  500, Datum = new DateTime(2019, 4, 16), Ucel = "test" },
        new MyData { Id = 2, Typ = "Odchozi",  Castka =  250, Datum = new DateTime(2019, 4, 16), Ucel = "test" },
        new MyData { Id = 3, Typ = "Prichozi", Castka = 2000, Datum = new DateTime(2019, 4, 16), Ucel = "test" },
        new MyData { Id = 4, Typ = "Odchozi",  Castka = 3500, Datum = new DateTime(2019, 4, 16), Ucel = "test" },
        new MyData { Id = 5, Typ = "Prichozi", Castka = 5000, Datum = new DateTime(2019, 4, 16), Ucel = "test" }
    };

    var view = new DataGridView();
    view.AllowUserToAddRows = false;
    view.AllowUserToDeleteRows = false;
    view.AllowUserToResizeRows = false;
    view.Anchor = System.Windows.Forms.AnchorStyles.Top
        | System.Windows.Forms.AnchorStyles.Bottom 
        | System.Windows.Forms.AnchorStyles.Left 
        | System.Windows.Forms.AnchorStyles.Right;
    view.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;
    view.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
    view.ReadOnly = true;
    view.RowHeadersVisible = false;
    view.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
    view.Dock = System.Windows.Forms.DockStyle.Fill;
    view.MouseClick += (sender, args) => { 
        // This is where the magic happens
        var selectedObject = ((DataGridView)sender)
            .SelectedRows.Cast<DataGridViewRow>()
            .Select(dgvr => dgvr.DataBoundItem).Cast<MyData>()
            .FirstOrDefault();
        // Show your result
        MessageBox.Show(
            $"Selected row with ID: {selectedObject.Id}",
            "Selection Notification", 
            MessageBoxButtons.OK, 
            MessageBoxIcon.Information,
            MessageBoxDefaultButton.Button1,
            MessageBoxOptions.DefaultDesktopOnly,
            false);
        };
    view.DataSource = data;

    var form = new Form { Width = 500, Height = 300 };
    form.Controls.Add(view);
    form.ShowDialog();
}

public class MyData
{
    public int Id { get; set; }
    public string Typ { get; set; }
    public int Castka { get; set; }
    public DateTime Datum { get; set; }
    public string Ucel { get; set; }
}
...