繁体   English   中英

如何从ObjectListView中选定项目的特定列获取数据?

[英]How to get data from a specific column of selected item(s) in ObjectListView?

我有一个ObjectListView,我需要获取已单击的行中特定列的值。

例如:

伊姆古尔 (我将图像直接放在这里,但我没有这样做的声誉。)

我需要从单击的行中获取ID(与单击行的位置无关-我指的是该行中的哪一列)。

谢谢。

使用SelectionChanged事件并从那里访问模型对象的相应属性。 假设您的模型类名为MyDataObject

    private void olv_SelectionChanged(object sender, EventArgs e) {
        if (olv.SelectedObject is MyDataObject data) {
            // Access data.Id or whatever else you need
        } 
    }

为了使答案更清楚,我提供了一个完整的工作示例供您使用。 本示例创建示例数据,数据网格视图,Windows窗体,然后显示Windows窗体。 然后,它响应鼠标单击,显示一个MessageBox来显示单击的行的ID。

我假设您正在使用DataGridView来显示数据,并且该数据以对象数组或列表的形式表示。 也可以使用带有DataTableDataSet来完成,但为简单起见,我使用了一个对象数组。

回答您的直接问题的代码在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; }
}

暂无
暂无

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

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