C# - 通过dataGridView

时间:2016-10-19 11:59:51

标签: c# winforms search datagridview textbox

我已经找到了解决问题的方法,但仍然没有找到适合我的方法。所以我报名参加我的问题得到了一些帮助。感谢帮助。

public Form1()
{
    InitializeComponent();
    dataGridView1.Columns.Add("FirstNames", "FirstName");
    dataGridView1.Columns.Add("SecondNames", "SecondName");
    dataGridView1.Columns.Add("AccountNames", "AccountName");
    dataGridView1.Columns.Add("Emailaddresses", "Emailaddress");

    try
    {
        // enter AD settings  
        PrincipalContext AD = new PrincipalContext(ContextType.Domain, (ConfigurationManager.AppSettings["Domaene"]));

        using (var searcher = new PrincipalSearcher(new UserPrincipal(AD)))
        {
            foreach (var result in searcher.FindAll())
            {
                DirectoryEntry de = result.GetUnderlyingObject() as DirectoryEntry;
                dataGridView1.Rows.Add
                (
                    de.Properties["givenName"].Value,
                    de.Properties["sn"].Value,
                    de.Properties["samAccountName"].Value,
                    de.Properties["userPrincipalname"].Value
                );                          
            }
        }
    }    
    catch (Exception ex)
    {
    }
}

这是我创建ActiveDirectory并将其放入dataGridView的方式。我正在搜索的功能是如何使用textBox搜索此DVG。所以我已经尝试过这样的事情:

String searchValue = textBox1.Text;
int rowIndex = -1;

foreach (DataGridViewRow row in dataGridView1.Rows)
{
    if (row.Cells[2].Value != null) // Need to check for null if new row is exposed
    {
        if (row.Cells[1].Value.ToString().Equals(searchValue))
        {
            rowIndex = row.Index;
            break;
        }
    }
}

此代码段来自此网站的其他帖子。我在构建时尝试过它并没有为我工作。当我在textBox中放入一些东西时,它会抛出一个System.NullReferenceException。问题是:我真的不知道为什么它不起作用。 将不胜感激任何答案!

问候, MarvinR

2 个答案:

答案 0 :(得分:1)

基本上,您希望枚举所有单元格,一旦找到要搜索的值,就返回此单元格的行索引。因此,您的代码应尽可能无提示,以引用异常引用异常。这种方法的一个例子。

private int SearchValueRowIndex()
{
    string searchValue = textBox1.Text;

    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
        foreach (DataGridViewCell cell in row.Cells)
        {
            if (cell.Value != null && cell.Value.ToString() == searchValue)
            {
                return cell.RowIndex;
            }
        }
    }

    // Not found
    return -1;
}

答案 1 :(得分:0)

试试这个

    var dg = new DataGrid();
var tb = new TextBox();
tb.ID = "myTextBox"

foreach (DataGridItem item in dg.Items)
{
    foreach (var cell in item.Cells)
    {
        TextBox val = (TextBox)item.FindControl("textboxid here");
        if (val.Text == tb.Text)
        {
            //do something here
        }
    }
}

这将循环遍历每个行和单元格以查找特定文本框中的值,如果需要循环浏览其他文本框,则可以编写另一部分代码来查找数据网格中的所有控件。