gpt4 book ai didi

c# - 按标签查找 DataGridView 项(行)

转载 作者:行者123 更新时间:2023-11-30 21:23:19 25 4
gpt4 key购买 nike

您好,我有 DataGridView 控件,我经常用项目填充(没有数据源)

那样

        int row = dgvClients.Rows.Add();
dgvClients.Rows[row].Cells["ClientObjectID"].Value = somevalue1;
dgvClients.Rows[row].Cells["ClientCode"].Value = somevalue2;
dgvClients.Rows[row].Tag = SomeObject1;

请注意,gridview 中的每一行代表某个对象,其标签 设置为特定对象。只有一行可以有一个 SomeObject 的 Tag 引用。没有重复。

现在我需要找到引用 SomeObject 的 datagridview ROW。什么是最好的方法?

最佳答案

这是我放在一起的东西,可能会做你所描述的事情。它又快又脏,但它可能会让你继续:

我在表单上有一个空白的 DataGridView、一个组合框和一个文本框。 TestObject 是一个类,它是一个具有 3 个字符串属性的对象,用于此示例的测试目的。

为方便起见,我用几个 TestObject 实例初始化了一个通用列表。然后,我手动将 3 列添加到 datagridview,它们对应于 TestObject 的 3 个属性。然后我遍历列表并手动将它们添加到 datagridview,并将对象实际存储在 Row 的标记属性中。

然后我用对 datagridview 中的列的引用填充组合框。用户将选择她/他想要搜索的列,然后在文本框中键入要匹配的文本。

然后我处理文本框 textchanged 事件以根据在组合框中选择的列和文本框中的文本搜索 datagridview。对于更大的数据集,您不想处理 textchanged 事件,因为在每次字母更改后搜索它会太慢。

如果不使用数据表或数据源,我想不出任何无需迭代即可搜索行的简单方法。我不知道您的要求,但我会使用带有列表的绑定(bind)源或至少设置一个数据表。使用绑定(bind)源,您还可以应用过滤器并动态地仅显示与您的搜索相匹配的结果。

using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

List<TestObject> objects = new List<TestObject>
{
new TestObject("1", "object1", "first"),
new TestObject("2", "object2", "nada"),
new TestObject("3", "object3", "Hello World!"),
new TestObject("4", "object4", "last")
};

dataGridView1.Columns.Add("ColID", "ID");
dataGridView1.Columns.Add("ColName", "Name");
dataGridView1.Columns.Add("ColInfo", "Info");

foreach (TestObject testObject in objects)
{
int row = dataGridView1.Rows.Add();
dataGridView1.Rows[row].Cells["ColID"].Value = testObject.ID;
dataGridView1.Rows[row].Cells["ColName"].Value = testObject.Name;
dataGridView1.Rows[row].Cells["ColInfo"].Value = testObject.Info;
dataGridView1.Rows[row].Tag = testObject;
}

foreach (DataGridViewColumn col in dataGridView1.Columns)
{
comboBox1.Items.Add(col);
}

comboBox1.ValueMember = "HeaderText";
comboBox1.SelectedIndex = 0;
}

private void textBox1_TextChanged(object sender, EventArgs e)
{
dataGridView1.ClearSelection();
foreach (DataGridViewRow row in dataGridView1.Rows)
{

if (row.Cells[((DataGridViewColumn)comboBox1.SelectedItem).Name].Value == null)
{
continue;
}
if (row.Cells[((DataGridViewColumn)comboBox1.SelectedItem).Name].Value.ToString().Equals(
textBox1.Text,StringComparison.InvariantCultureIgnoreCase))
{
row.Selected = true;
return;
}
}
}
}
}

public class TestObject
{
public TestObject(string id, string name, string info)
{
ID = id;
Name = name;
Info = info;
}

public string ID { get; set; }
public string Info { get; set; }
public string Name { get; set; }
}

关于c# - 按标签查找 DataGridView 项(行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1821736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com