BindingSource.Find键比较是不区分大小写的?

时间:2010-04-16 14:23:41

标签: c# .net datagridview bindingsource

我正在使用BindingSource.Find()在刷新DataGridView后返回到用户的位置。我使用BindingSource.Find()和RowID作为我正在搜索的DataColumn。不幸的是,Oracle可以返回两个仅在它们的情况下不同的RowID。

BindingSource.Find()返回第一个匹配,无论大小写。

查看MSDN文档:

public int Find(string propertyName, Object key)

它表示propertyName比较不区分大小写,但没有提到密钥比较是否。

有谁知道如何使BindingSource.Find区分大小写?

1 个答案:

答案 0 :(得分:1)

对于DataView,您需要做的就是将父CaseSensitive的{​​{1}}属性设置为true。我只是使用以下代码快速原型化,并且工作正常:

DataTable

对于其他类型的IBindingList,正如文档所说,你需要一个底层列表来实现一个区分大小写的Find。为了完整起见,我已经展示了以下代码:

public Form1()
{
    InitializeComponent();

    DataSet set1 = new DataSet();

    // Some xml data to populate the DataSet with.
    string testXml =
    "<?xml version='1.0' encoding='UTF-8'?>" +
    "<numbers>" +
    "<number><name>one</name></number>" +
    "<number><name>two</name></number>" +
    "<number><name>Two</name></number>" +
    "<number><name>three</name></number>" +
    "</numbers>";

    // Read the xml.
    StringReader reader = new StringReader(testXml);
    set1.ReadXml(reader);

    // Get a DataView of the table contained in the dataset.
    DataTableCollection tables = set1.Tables;
    // Set the CaseSensetive property
    tables[0].CaseSensitive = true;
    DataView view1 = new DataView(tables[0]);

    // Create a DataGridView control and add it to the form.            
    dataGridView1.AutoGenerateColumns = true;            

    // Create a BindingSource and set its DataSource property to
    // the DataView.
    BindingSource source1 = new BindingSource();
    source1.DataSource = view1;

    // Set the data source for the DataGridView.
    dataGridView1.DataSource = source1;

    // Set the Position property to the results of the Find method.
    int itemFound = source1.Find("name", "Two");
    source1.Position = itemFound;
}

CaseSensitiveBindingList的代码是:

public Form1()
{
    InitializeComponent();

    // This uses my CaseSensitiveBindingList which I have code for later
    BindingList<DGVItems> source = new CaseSensitiveBindingList<DGVItems>() 
        { 
            new DGVItems { Number = "one" },
            new DGVItems{Number = "two"},
            new DGVItems{Number = "Two"}
        };

    BindingSource bindingSource = new BindingSource();
    bindingSource.DataSource = source;

    dataGridView1.DataSource = bindingSource;

    var index = bindingSource.Find("Number", "Two");

    // Index is 2 (third item) as desired.
    MessageBox.Show(number.ToString());

}

public class DGVItems
{
    public string Number { get; set; }
}

该代码几乎可以肯定地得到改进,但显示了一般概念。

相关问题