powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как определить индекс найденной строки?
71 сообщений из 71, показаны все 3 страниц
Как определить индекс найденной строки?
    #38237961
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе время суток!

DataTable ищу строку

DataRow foundRow = SqlDataTable.Rows.Find(this.ParentCombo.TextBox1.Text);

теперь хочу спозиционироваться на неё в DataGridView
походу следует использовать свойство FirstDisplayedScrollingRowIndex
(понятно что DataSource у DataGridView и есть эта SqlDataTable)

как получить этот индекс из foundRow?

Спасибо.
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38237973
WPF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Промежуточный объект создай, в нем и ищи
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38237990
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WPF,

может я не догоняю но у меня уже найдено, теперь на него надо спозиционироваться в DataGridView
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38237993
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
int index = dt.Rows.IndexOf(row);
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38238026
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloper,
спасибо, то что надо
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38238075
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenkocooldeveloper,
спасибо, то что надоБудет работать только при отсутствии локального фильтра и сортировки. Надо искать индекс записи в DataView, к которому прицеплен DataGridView.
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38238140
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КБудет работать только при отсутствии локального фильтра и сортировки. Надо искать индекс записи в DataView, к которому прицеплен DataGridView.
DataTable научилась фильтровать и сортировать?
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38239315
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloperАлексей КБудет работать только при отсутствии локального фильтра и сортировки. Надо искать индекс записи в DataView, к которому прицеплен DataGridView.
DataTable научилась фильтровать и сортировать?
Таки DataGridView поди прицеплен к DataTable не напрямую, а через дефолтный DataView, если он явно не указан. Не?

Код: c#
1.
2.
3.
4.
5.
public class DataTable : MarshalByValueComponent, 
    IListSource // <= Вот это вот зачем, как ты думаеш?
{
    ....
}
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38239504
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КТаки DataGridView поди прицеплен к DataTable не напрямую, а через дефолтный DataView, если он явно не указан. Не?
А с каких это пор манипуляции с DefaultView начали влиять на DataTable? :)
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38239617
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloper, ТС-у надо определить позицию найденной им строки в DataGridView. Последний отображает фактически DataTable.DefaultView.
Давай попросим ТС отсортировать грид по какой-нибудь колонке, чтобы порядок строк стал отличным от первоначального, воспользоваться твоим кодом и проверить, а правильный-ли индекс ему вернётся.
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38239652
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloper,

действительно, если в гриде кликнуть по заголовку то индекс полученный из DataTable перестаёт соответствовать реальному в гриде.
Вопрос решил таким образом:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
        public Boolean FindById(string lsID)
        {
            if (this.ParentCombo.SqlDataTable != null) // Проверка на cуществование объекта DataTable
            {

                int index = (this.dataGridView.DataSource as BindingSource).Find(this.ParentCombo.SqlDataTable.Columns[0].ColumnName.ToString(), lsID);
                if (index != null && index>-1 && this.dataGridView != null) // проверка индекса
                {
                    CurrencyManager currencyManager = (CurrencyManager)BindingContext[this.dataGridView.DataSource, this.dataGridView.DataMember];
                    currencyManager.Position = index; // позиционирование в гриде
                    return true;
                }
                return false;
            }
            return true;
        }


возможно не самый оптимальный способ но работает надёжно, и не зависит от сортировки и фильтрации.

Спасибо всем кто учавствовал.
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38239654
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAcooldeveloper, ТС-у надо определить позицию найденной им строки в DataGridView. Последний отображает фактически DataTable.DefaultView.
Давай попросим ТС отсортировать грид по какой-нибудь колонке, чтобы порядок строк стал отличным от первоначального, воспользоваться твоим кодом и проверить, а правильный-ли индекс ему вернётся.
Индекс будет тот же самый, что и в первом случае. Именно это я и сказал:
МСУА с каких это пор манипуляции с DefaultView начали влиять на DataTable? :)
Что не так-то?
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38239659
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenkocooldeveloper, действительно, если в гриде кликнуть по заголовку то индекс полученный из DataTable перестаёт соответствовать реальному в гриде
Разумеется. Я тебе ответил на вопрос:

Mikhail как получить этот индекс из foundRow?

P.S. А вообще, святое правило: юзаешь датагридвью, юзай и байдингсурс.
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38239673
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenkoвозможно не самый оптимальный способ но работает надёжно, и не зависит от сортировки и фильтрации.
Классический вариант: отыскать заново элемент по идентификатору и определить его индекс через тот же "мой вариант".

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
public partial class Form1 : Form
{
    public DataRow Row { get; set; }

    public Form1()
    {
        InitializeComponent();

        var table = new DataTable();
        table.Columns.Add("ID", typeof(int));
        Enumerable.Range(1, 10).ToList().ForEach(d => table.Rows.Add(d));

        dataGridView1.DataSource = table;
        Row = table.Rows[3];
        int index = table.Rows.IndexOf(Row);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        var table = (dataGridView1.DataSource as DataTable).DefaultView.ToTable();
        var row = table.Select("ID=" + Row["ID"])[0];
        int index = table.Rows.IndexOf(row); // тут будет новое значение
    }
}
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38239702
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloper,

да, так выглядит оптимальнее, и не требует индекса.
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38239717
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenkocooldeveloper, да, так выглядит оптимальнее, и не требует индекса.
Наоборот, этот вариант не оптимальнее:

Код: c#
1.
2.
// Первый лишний дополнительный цикл
var table = (dataGridView1.DataSource as DataTable).DefaultView.ToTable();



Код: c#
1.
2.
// Второй лишний дополнительный цикл
var row = table.Select("ID=" + Row["ID"])[0];



Юзай BindingSource.
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38239906
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloper,

спасибо за науку.
Я пока только разбираюсь с шарпом.
После дельфей многое кажется более сложным и не логичным. Но, думаю, это следствие пока малого опыта и знаний в шарпе.

Спасибо.
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38239914
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail TchervonenkoПосле дельфей многое кажется более сложным и не логичным
Знаем, плавали :)

P.S. Недавно заходил упертый дельфист, пришлось расколыхать его мозг немного :)
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38240067
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloperskyANAcooldeveloper, ТС-у надо определить позицию найденной им строки в DataGridView. Последний отображает фактически DataTable.DefaultView.
Давай попросим ТС отсортировать грид по какой-нибудь колонке, чтобы порядок строк стал отличным от первоначального, воспользоваться твоим кодом и проверить, а правильный-ли индекс ему вернётся.
Индекс будет тот же самый, что и в первом случае. Именно это я и сказал:
МСУА с каких это пор манипуляции с DefaultView начали влиять на DataTable? :)
Что не так-то?Протри глаза.
ТС-у нужен порядковый индекс в DataGridView (displayIndex), а не индекс строки в таблице данных (dataIndex).
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38240163
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAПротри глаза.
ТС-у нужен порядковый индекс в DataGridView (displayIndex), а не индекс строки в таблице данных (dataIndex).
Хватит упорно давить лбом кирпичную кладку. Я еще раз повторяю: 14228907
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38240273
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloperskyANAПротри глаза.
ТС-у нужен порядковый индекс в DataGridView (displayIndex), а не индекс строки в таблице данных (dataIndex).
Хватит упорно давить лбом кирпичную кладку. Я еще раз повторяю: 14228907 Оставь при себе свои плоские метафоры.
Я понял, что ты подумал, что под "эти индексом" ТС понимает позицую строки в DataTable, а не в DataGridView.

Вот эту своё сообщение поясни: 14228895 .
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38240300
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAОставь при себе свои плоские метафоры.
Но уж лучше они, чем твоё унылое гундение, согласись.

skyANAЯ понял, что ты подумал, что под "эти индексом" ТС понимает позицую строки в DataTable, а не в DataGridView.Вот эту своё сообщение поясни: 14228895 .
Автор спросил:

Mikhail TchervonenkoDataRow foundRow = SqlDataTable.Rows.Find(this.ParentCombo.TextBox1.Text);
как получить этот индекс из foundRow?
Я ему ответил. Мне фиолетово было, к чему прикручен этот SqlDataTable, зачем он прикручен к гриду и почему не справедлив мир. Мне так же фиолетово, есть ли у грида сортировка. Она вообще может быть выключена у автора и не используется.
Так понятно?
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38240334
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloperskyANAОставь при себе свои плоские метафоры.
Но уж лучше они, чем твоё унылое гундение, согласись.

skyANAЯ понял, что ты подумал, что под "эти индексом" ТС понимает позицую строки в DataTable, а не в DataGridView.Вот эту своё сообщение поясни: 14228895 .
Автор спросил:

Mikhail TchervonenkoDataRow foundRow = SqlDataTable.Rows.Find(this.ParentCombo.TextBox1.Text);
как получить этот индекс из foundRow?
Я ему ответил. Мне фиолетово было, к чему прикручен этот SqlDataTable, зачем он прикручен к гриду и почему не справедлив мир. Мне так же фиолетово, есть ли у грида сортировка. Она вообще может быть выключена у автора и не используется.
Так понятно?Не тупи. Я тебе тебя не об этом спрашиваю. Не фиг на автора стрелки переводить.
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38240403
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAНе тупи. Я тебе тебя не об этом спрашиваю. Не фиг на автора стрелки переводить.
Опять давишь лбом стену? ) Что именно тебе там не ясно?
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38240473
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloperskyANAНе тупи. Я тебе тебя не об этом спрашиваю. Не фиг на автора стрелки переводить.
Опять давишь лбом стену? ) Что именно тебе там не ясно?Не ясно, на фиг ты постишь бессмысленные сообщения, если понимаешь, что ТС-у нужно совсем другое. Тро-ло-ло что-ли?
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38240497
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAcooldeveloperОпять давишь лбом стену? ) Что именно тебе там не ясно?Не ясно, на фиг ты постишь бессмысленные сообщения, если понимаешь, что ТС-у нужно совсем другое. Тро-ло-ло что-ли?
Еще раз повторяю, для тех у кого туго с понимаем бытия :)
Мой вариант абсолютно рабочий . В случае, если нет сортировок в гриде: никаких проблем. В случае, если сортировки есть: я объяснил, как с помощью моего же варианта сделать так, что бы индекс находился корректно. Таким образом, я дал автору решение. Рабочее решение .
Внимание вопрос: как коррелирует моё рабочее решение с твоим унылым вбросом о том, что я посщю бессмысленные сообщения?
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38240538
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloperМой вариант абсолютно рабочий . В случае, если нет сортировок в гриде: никаких проблем.Жжёшь

Правильно будет так: твой вариант рабочий, если в гриде нет ни фильтрации, ни сортировок.
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38240617
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAcooldeveloperМой вариант абсолютно рабочий . В случае, если нет сортировок в гриде: никаких проблем.Жжёшь

Правильно будет так: твой вариант рабочий, если в гриде нет ни фильтрации, ни сортировок.

А чем это не решение? Тем более, автор ничего про сортировку не писал. Это во-первых. А во-вторых, мой код рабочий и с сортировкой и фильтрацией. Разуй глаза, я показал все на примере.
Так что выбирайся уже из танка.
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38240630
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloper, решение
Код: c#
1.
int index = dt.Rows.IndexOf(row);

это не решение, так как грид будет неправильно спозиционирован, если есть фильтр или сортировка.
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38240631
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloper, второй твой вариант - шняга, ты сам это признал: 14229096 .
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38240640
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAcooldeveloper, второй твой вариант - шняга, ты сам это признал: 14229096 .
Если используется сортировка. О ней автор ничего не говорил в сабже. Поэтому для вариантов простого отображения данных мой вариант нормален. Вопросы?
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38240643
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAcooldeveloper, решение
Код: c#
1.
int index = dt.Rows.IndexOf(row);

это не решение, так как грид будет неправильно спозиционирован, если есть фильтр или сортировка.
Включи остатки мозгов, это будет работать правильно. Через дополнителтный цикл поиска элемента.
Во-вторых, автор не говорил ни о каких сортировках. Я дал ответ на конкретный вопрос. Что там еще у автора есть - монопенисуально.
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38240870
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А теперь правильный ответ. :-)

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
   
            var table = new DataTable();

            var index = table.DefaultView
                .Cast<DataRowView>()
                .FirstIndex(r => ((int)r["id"]) == 12345);

    ............................................

    public static class EnumerableHelper
    {
        public static int FirstIndex<T>(this IEnumerable<T> src, Func<T, bool> match)
        {
            int result = 0;
            foreach (var item in src)
            {
                if (match(item))
                    return result;
                result++;
            }
            return -1;
        }
    }
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38241013
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КА теперь правильный ответ. :-)

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
   
            var table = new DataTable();

            var index = table.DefaultView
                .Cast<DataRowView>()
                .FirstIndex(r => ((int)r["id"]) == 12345);

    ............................................

    public static class EnumerableHelper
    {
        public static int FirstIndex<T>(this IEnumerable<T> src, Func<T, bool> match)
        {
            int result = 0;
            foreach (var item in src)
            {
                if (match(item))
                    return result;
                result++;
            }
            return -1;
        }
    }



1. Зачем гавнокастинг?
2. Зачем гавнохелпер? Any ведь есть.
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38241114
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloper1. Зачем гавнокастинг?Что-то я не увидел IEnumerable<DataRowView>. Может плохо смотрел? :-)
Код: c#
1.
2.
3.
4.
5.
public class DataView : MarshalByValueComponent, IBindingList,
   IList, ICollection, IEnumerable, ITypedList, ISupportInitialize
{
    ....
}


cooldeveloper2. Зачем гавнохелпер? Any ведь есть.Вроде как задача определить индекс записи?

зы: Предлагаю ввести мараторий на выражения гавноXXX . Не нравятся...
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38241118
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloper1. Зачем гавнокастинг?
Или это про это?
Код: c#
1.
((int)r["id"]) == 12345


Ну пусть преобразовывается иначе. Это просто пример...
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38241120
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КЧто-то я не увидел IEnumerable<DataRowView>. Может плохо смотрел? :-)
Не понял, какой IEnumerable? Я о (int)r["id"]) == 12345 vs r["id"]) == 12345 :)

Алексей КВроде как задача определить индекс записи?
Ну, ты ж ищешь первый элемент и ретурнишься. Any делает тоже самое.

Алексей Кмараторий
Ок.
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38241122
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КВроде как задача определить индекс записи?
Ну, ты ж ищешь первый элемент и ретурнишься. Any делает тоже самое.Только при этом возвращает true/false. А нужен индекс.
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38241123
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУr["id"]) == 12345А что, такое будет работать?
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38241145
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КТолько при этом возвращает true/false. А нужен индекс.
Тьфу ты, заговорился. Конечно речь о First, я думал, ты поймешь.

Алексей КМСУ(r["id"]) == 12345А что, такое будет работать?
Разумеется, почему нет?
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38241154
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КТолько при этом возвращает true/false. А нужен индекс.
Тьфу ты, заговорился. Конечно речь о First, я думал, ты поймешь.А зачем нам ссылка на элемент? Нам нужен его индекс (см название темы :-) ), чтобы потом по нему установить текущую запись. Иначе будет лишний поиск по списку.
МСУАлексей Кпропущено...
А что, такое будет работать?
Разумеется, почему нет?Ну ладно. :-)
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38241197
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КА зачем нам ссылка на элемент? Нам нужен его индекс (см название темы :-) ), чтобы потом по нему установить текущую запись. Иначе будет лишний поиск по списку.
Не понял, откуда там будет лишний поиск?
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38241216
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КА зачем нам ссылка на элемент? Нам нужен его индекс (см название темы :-) ), чтобы потом по нему установить текущую запись. Иначе будет лишний поиск по списку.
Не понял, откуда там будет лишний поиск?Ну покажи пример, как имея ссылку на нужную запись, сделать её текущей в BindingSource. Кроме как myBindingSource.Position = itemIndex , других способов вроде нет.
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38241221
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,

Код: c#
1.
int index = table.Rows.IndexOf(table.DefaultView.Cast<DataRowView>().First(item => (int)item["ID"] == 123).Row);



Вот и всё, никаких циклов и левых экстеншен хелперов.

P.S. Ну если IndexOf не считать "циклом", конечно. По сути это рекурсия.
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38241241
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей К,

Код: c#
1.
int index = table.Rows.IndexOf(table.DefaultView.Cast<DataRowView>().First(item => (int)item["ID"] == 123).Row);



Вот и всё, никаких циклов и левых экстеншен хелперов.

P.S. Ну если IndexOf не считать "циклом", конечно. По сути это рекурсия.

.First - первый цикл.
.IndexOf - второй цикл.

Оно конечно экономия на спичках, но всё равно неприятно.

Мой прикладной код короче и понятнее (не считая расширяющего метода, но это системный код).

И результат опять неправильный. Нас интересует индекс записи в DataView а не в DataTable по описанным выше причинам (локальная фильтрация и сортировка).
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38241242
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУP.S. Ну если IndexOf не считать "циклом", конечно. По сути это рекурсия.Про рекурсию не понял. :-)
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38241245
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУВот и всё, никаких цикловУ меня в прикладном коде циклов тоже нет. Всё функционально.
МСУи левых экстеншен хелперов.Не самоцель. В каждом нормальном проекте есть самописный системный слой.
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38241288
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К.First - первый цикл.
Это такой же цикл, как и твой FirstIndex

Алексей К.IndexOf - второй цикл.
Не совсем цикл, рекурсия. Но суть такая же.

Алексей КОно конечно экономия на спичках, но всё равно неприятно.
Я уж лучше в одну строчку кода воспользуюсь штатным DataTable.Rows.IndexOf(DataRow), чем буду писать вот этот ... код :)
... код
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public static class EnumerableHelper
    {
        public static int FirstIndex<T>(this IEnumerable<T> src, Func<T, bool> match)
        {
            int result = 0;
            foreach (var item in src)
            {
                if (match(item))
                    return result;
                result++;
            }
            return -1;
        }
}



Алексей КМой прикладной код короче и понятнее (не считая расширяющего метода, но это системный код).
А почему это ты экстеншен не считаешь? Лихо, однако :) Насчет понятности кода, это смотря с какой стороны посмотреть.

Алексей КИ результат опять неправильный. Нас интересует индекс записи в DataView а не в DataTable по описанным выше причинам (локальная фильтрация и сортировка).
Запарил ты со своей сортировкой :)

Алексей КМСУP.S. Ну если IndexOf не считать "циклом", конечно. По сути это рекурсия.Про рекурсию не понял. :-)
IndexOf - это рекурсия.
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38241295
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КИ результат опять неправильный. Нас интересует индекс записи в DataView а не в DataTable по описанным выше причинам (локальная фильтрация и сортировка).
Запарил ты со своей сортировкой :)

Код: c#
1.
var index = table.DefaultView.Cast<DataRowView>().Select((item, index) => new { id = (int)item["ID"], index }).Single(search => search.id == 123).index;



Всё четко и понятно :)
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38241315
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУМСУпропущено...

Запарил ты со своей сортировкой :)

Код: c#
1.
var index = table.DefaultView.Cast<DataRowView>().Select((item, index) => new { id = (int)item["ID"], index }).Single(search => search.id == 123).index;



Всё четко и понятно :)Но не компилируется. :-)
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38241320
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей Кпропущено...
Про рекурсию не понял. :-)
IndexOf - это рекурсия.Не верю!
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38241321
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КИ результат опять неправильный. Нас интересует индекс записи в DataView а не в DataTable по описанным выше причинам (локальная фильтрация и сортировка).
Запарил ты со своей сортировкой :)Суровая реальность. :-)
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38241325
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КМой прикладной код короче и понятнее (не считая расширяющего метода, но это системный код).
А почему это ты экстеншен не считаешь? Лихо, однако :) Насчет понятности кода, это смотря с какой стороны посмотреть.Потому что это системный код. Пишется один раз.
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38241334
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уч ты! И правда рекурсия. Думал там просто массив. Неожиданно.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
public int IndexOf(int nodeId, K item)
{
    int index = -1;
    if (nodeId != 0)
    {
        if (this.Key(nodeId) == item)
        {
            return this.GetIndexByNode(nodeId);
        }
        index = this.IndexOf(this.Left(nodeId), item);
        if (index != -1)
        {
            return index;
        }
        index = this.IndexOf(this.Right(nodeId), item);
        if (index != -1)
        {
            return index;
        }
    }
    return index;
}
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38241336
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КУч Ух ты!Поправил...
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38241346
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КМСУпропущено...


Код: c#
1.
var index = table.DefaultView.Cast<DataRowView>().Select((item, index) => new { id = (int)item["ID"], index }).Single(search => search.id == 123).index;



Всё четко и понятно :)Но не компилируется. :-)Ладно, скомпилировалось... Но одинхрен хуже. :-)
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38241353
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КЛадно, скомпилировалось... Но одинхрен хуже. :-)
Ну правильно, сколько можно сидеть на FW 1.1
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38241484
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КЛадно, скомпилировалось... Но одинхрен хуже. :-)
Ну правильно, сколько можно сидеть на FW 1.1 Провинция...
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38241493
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КПровинция...
Так а чем "одинхрен хуже" та? :)
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38241507
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КПровинция...
Так а чем "одинхрен хуже" та? :)Потому что мне не нравится. :-) Букв больше...
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38241535
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КПотому что мне не нравится. :-) Букв больше...
Хм :)

буквы
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
// 152
int my = @"var index = table.DefaultView.Cast<DataRowView>().Select((item, index) => new { id = (int)item['ID'], index }).Single(search => search.id == 123).index;".Length;
            
// 639
int alex = @"
var index = table.DefaultView
    .Cast<DataRowView>()
    .FirstIndex(r => ((int)r['id']) == 12345);

public static class EnumerableHelper
{
    public static int FirstIndex<T>(this IEnumerable<T> src, Func<T, bool> match)
    {
        int result = 0;
        foreach (var item in src)
        {
            if (match(item))
                return result;
            result++;
        }
        return -1;
    }
}".Length;

...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38241554
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей, как тебе вот этот удар под ребро? :)

Код: c#
1.
int index = table.DefaultView.Cast<DataRowView>().TakeWhile(item => (int)item["ID"] != 123).Count();
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38241944
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей, как тебе вот этот удар под ребро? :)

Код: c#
1.
int index = table.DefaultView.Cast<DataRowView>().TakeWhile(item => (int)item["ID"] != 123).Count();
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38242466
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей, как тебе вот этот удар под ребро? :)

Код: c#
1.
int index = table.DefaultView.Cast<DataRowView>().TakeWhile(item => (int)item["ID"] != 123).Count();

Всё равно, этому не место в прикладном коде. Надо выносить в системный слой. :-)
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38242512
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КМСУАлексей, как тебе вот этот удар под ребро? :)

Код: c#
1.
int index = table.DefaultView.Cast<DataRowView>().TakeWhile(item => (int)item["ID"] != 123).Count();

Всё равно, этому не место в прикладном коде. Надо выносить в системный слой. :-)

Как вариант, сделать экстеншен над иенумерабле.
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38242681
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей Кпропущено...
Всё равно, этому не место в прикладном коде. Надо выносить в системный слой. :-)

Как вариант, сделать экстеншен над иенумерабле.Единственный правильный вариант. :-)
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38242703
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КЕдинственный правильный вариант. :-)
Да, но только на тэйк вайле, а не на этом тихом ужасе :)
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38242718
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloperАлексей КЕдинственный правильный вариант. :-)
Да, но только на тэйк вайле, а не на этом тихом ужасе :)
Чем-то напомнило
автору многих дотнет-ориентированных товарищей еще не прошла болезнь "новый код должен обязательно и во что бы то ни стало использовать все известные прогрессивные идеи и фичи". например лямбда-выражения это просто пир_духа).
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38242737
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К, почитал пост этого товарища. От себя добавлю: мутный бред с линейной иронией :)
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38242913
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloperАлексей К, почитал пост этого товарища. От себя добавлю: мутный бред с линейной иронией :)Это да, но его можно понять. :-)
...
Рейтинг: 0 / 0
Как определить индекс найденной строки?
    #38242918
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КЭто да, но его можно понять. :-)
Ну знаете ли, можно понять и психопата, размахивающего лопатой у мавзолея :)
...
Рейтинг: 0 / 0
71 сообщений из 71, показаны все 3 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как определить индекс найденной строки?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]