none
Поиск ячейки в datagridView через dataset/C# RRS feed

  • Вопрос

  • string s2 = @"студенты.xml"; DataSet ds2 = new DataSet(); private void read_XML() { ds2.ReadXml(s2); dataGridView2.DataSource = ds2.Tables["студенты"]; } private void toolStripTextBox2_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { try { /*адекватно не работает поиск в DatagridView, по таблице студенты, столбец "фамилия",

    данные все берутся из .xml, сам факт того что если я использую вместо вызова ячейки которую искал

    а например, просто выведу это все через MessageBox.Show(" id: "+ dv[i]["id"].ToString()) то все отлично.

    можно ли как то без bindingSourse это осуществить? и выделять полученную ячейку или всю строку не важно

    Пример вводишь значение петров он находит то что на конце ОВ или вообще не понятно что...*/ DataView dv2 = new DataView(ds2.Tables["студенты"]); dv2.Sort = "фамилия"; int i = dv2.Find(toolStripTextBox2.Text.ToString()); dataGridView2.CurrentCell = dataGridView2[1, i]; } catch (Exception p) { MessageBox.Show(p.Message); } } }

    Я вообще понять не могу что ему нужно... Вот часть xml чтобы кто-нибудь проверил 

    <?xml version="1.0" encoding="UTF-8"?>
    <dataroot xmlns:od="urn:schemas-microsoft-com:officedata" generated="2015-05-10T21:31:53">
    <студенты>
    <id>1</id>
    <фамилия>Иванов</фамилия>
    <имя>Иван</имя>
    <отчество>Иванович</отчество>
    <дата_x0020_рождения>1995-01-01T00:00:00</дата_x0020_рождения>
    <пол>м</пол>
    <специальность>грузоперевозки</специальность>
    <группа>2Г-9411</группа>
    <курс>2</курс>
    <N_x0020_телефона>89145432345</N_x0020_телефона>
    <тип_x0020_обучения>бюджетное</тип_x0020_обучения>
    <адрес>1</адрес>
    </студенты>
    <студенты>
    <id>3</id>
    <фамилия>Петров</фамилия>
    <имя>Петр</имя>
    <отчество>Петрович</отчество>
    <дата_x0020_рождения>1990-02-02T00:00:00</дата_x0020_рождения>
    <пол>м</пол>
    <специальность>грузоперевозки</специальность>
    <группа>2Г-9411</группа>
    <курс>2</курс>
    <N_x0020_телефона>89504567834</N_x0020_телефона>
    <тип_x0020_обучения>платное</тип_x0020_обучения>
    <N_x0020_договора>345267</N_x0020_договора>
    <адрес>2</адрес>
    </студенты>
    <студенты>
    <id>4</id>
    <фамилия>Александров</фамилия>
    <имя>Александр</имя>
    <отчество>Александрович</отчество>
    <дата_x0020_рождения>1996-03-03T00:00:00</дата_x0020_рождения>
    <пол>м</пол>
    <специальность>грузоперевозки</специальность>
    <группа>2Г-9411</группа>
    <курс>2</курс>
    <N_x0020_телефона>89089878787</N_x0020_телефона>
    <тип_x0020_обучения>платное</тип_x0020_обучения>
    <N_x0020_договора>356734</N_x0020_договора>
    <адрес>3</адрес>
    </студенты>

    Подскажите что не так, и что нужно изменить или как лучше осуществить, буду признателен!


Ответы

  • Ну давайте смотреть:

    1. Зачем то создали вью. Ну ладно, почему бы и нет.

    DataView dv2 = new DataView(ds2.Tables["студенты"]);

    2. Отсортировали вью по фамилии. Тоже хорошо.

    dv2.Sort = "фамилия";

    3. Нашли индекс в отсортированном вью. Тоже неплохо, хотя конечно стоит проверить нашлось ли что нибудь.

    int i = dv2.Find(toolStripTextBox2.Text.ToString());

    4. Зачем то использовали индекс в отсортированном вью на совсем другом списке.

    Так как индексы одинаковых элементов не совпадают то понятное дело получили случайную ячейку.

    dataGridView2.CurrentCell = dataGridView2[1, i];

    Что делать: ищите во вью которое прибайдено к гриду. Для скорости можно создать индекс, хотя очевидно не проблема сортировать каждый раз.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    • Помечено в качестве ответа YaphetS1337 13 мая 2015 г. 10:40
    Модератор

Все ответы

  • Ну давайте смотреть:

    1. Зачем то создали вью. Ну ладно, почему бы и нет.

    DataView dv2 = new DataView(ds2.Tables["студенты"]);

    2. Отсортировали вью по фамилии. Тоже хорошо.

    dv2.Sort = "фамилия";

    3. Нашли индекс в отсортированном вью. Тоже неплохо, хотя конечно стоит проверить нашлось ли что нибудь.

    int i = dv2.Find(toolStripTextBox2.Text.ToString());

    4. Зачем то использовали индекс в отсортированном вью на совсем другом списке.

    Так как индексы одинаковых элементов не совпадают то понятное дело получили случайную ячейку.

    dataGridView2.CurrentCell = dataGridView2[1, i];

    Что делать: ищите во вью которое прибайдено к гриду. Для скорости можно создать индекс, хотя очевидно не проблема сортировать каждый раз.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    • Помечено в качестве ответа YaphetS1337 13 мая 2015 г. 10:40
    Модератор
  • Спасибо, за внятное объяснение. Но я сделал просто через bindingSource, зачем велосипед делать. Ведь там насколько я понимаю в DataView нельзя явно вызывать CurrenCell