С Новым годом! Форум программистов, компьютерный форум, киберфорум
C#: Web, ASP.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/26: Рейтинг темы: голосов - 26, средняя оценка - 4.85
 Аватар для mitsky
31 / 31 / 6
Регистрация: 31.12.2009
Сообщений: 82

GridView. индекс строки в RowCommand.

11.03.2010, 13:04. Показов 5178. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть вопрос следующего характера... на страничке лежит GridView для которого я формирую DataTable с данными и заполняю им грид, также в грид добавляется колонка с кнопками(LinkButton). по нажатию на кнопку в любой строке мне нужно взять некоторые значения из этой строки. для этого мне нужно знать индекс этой строки. делаю так...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
protected void GVDocumentList_RowCreated(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            LinkButton btn = (LinkButton)e.Row.Cells[0].Controls[0];
 
            btn.CommandArgument = e.Row.RowIndex.ToString();
        }
    }
 
protected void GVDocumentList_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        int index = Convert.ToInt32(e.CommandArgument);
 
        GridViewRow row = GVDocumentList.Rows[index];
    }
проблема в том что при выполнении строки GridViewRow row = GVDocumentList.Rows[index]; я получаю System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.03.2010, 13:04
Ответы с готовыми решениями:

Событие RowCommand не вызывается при удалении ранее удалённой строки из GridView
Уважаемые форумчане! Недавно начал писать на ASP.NET, имея богатый опыт работы на C#, и столкнулся со следующей проблемой. На форме...

GridView. Событие RowCommand
Есть GridView с привязкой данных <asp:GridView ID="GridView1" runat="server" Height="80px" Width="617px"...

Как получить индекс выделеной строки в GridView
Вроде простая вещь... В GridView есть поле: <asp:TemplateField HeaderText="Оператор" SortExpression="NAME"> ...

9
Комбайнёр
 Аватар для MAcK
1606 / 704 / 77
Регистрация: 27.05.2008
Сообщений: 2,535
11.03.2010, 13:18
В гриде Key="Fields" прописали?
1
 Аватар для mitsky
31 / 31 / 6
Регистрация: 31.12.2009
Сообщений: 82
11.03.2010, 13:41  [ТС]
если честно, то даже не знаю что это .. можно поподробнее?
0
Комбайнёр
 Аватар для MAcK
1606 / 704 / 77
Регистрация: 27.05.2008
Сообщений: 2,535
11.03.2010, 14:47
Цитата Сообщение от mitsky Посмотреть сообщение
если честно, то даже не знаю что это .. можно поподробнее?
Сначала прочтите .чт онаписано в книге, а потом я объясню некоторые моменты, если останутся
0
 Аватар для mitsky
31 / 31 / 6
Регистрация: 31.12.2009
Сообщений: 82
11.03.2010, 14:55  [ТС]
я так понял вы имели в виду GridView.DataKeys? или я не про то подумал?
0
Комбайнёр
 Аватар для MAcK
1606 / 704 / 77
Регистрация: 27.05.2008
Сообщений: 2,535
11.03.2010, 15:29
Да, про это
0
 Аватар для homich77
81 / 80 / 4
Регистрация: 06.04.2009
Сообщений: 326
11.03.2010, 16:15
Тема еще актуальна?
0
 Аватар для mitsky
31 / 31 / 6
Регистрация: 31.12.2009
Сообщений: 82
11.03.2010, 17:36  [ТС]
да

Добавлено через 1 час 9 минут
что-то я теперь не пойму каким боком можно сюда прикрутить DataKeys ...
0
 Аватар для homich77
81 / 80 / 4
Регистрация: 06.04.2009
Сообщений: 326
11.03.2010, 18:52
DataKeys записывается в теге <asp:GridView...>

Добавлено через 1 минуту
в DataKeys записываешь название поля, кот. ты получаешь с базы

Добавлено через 19 минут
Пример:
HTML5
1
<asp:GridView ID="grdProduct" runat="server" AutoGenerateColumns="false" DataKeyNames="IDProduct" >...
а в коде обращаешься так:
C#
1
grdProduct.DataKeys[i].Values[1].ToString()
где i - индекс строки, на кот. ты нажал
Если ты используешь для нажатия LinkButton, и тебе необходимо понять к какой строке он относится (индекс строки). Делается так:
1. <asp:LinkButton ID="linkBtn" runat="server" OnClick="linkBtn_Click".../>
2. В коде в обработчике события linkBtn_Click определяем номер строки таким образом:
C#
1
2
3
4
5
6
7
8
9
10
11
12
    
protected void linkBtn_Click(object sender, EventArgs e) {
        LinkButton lbn = sender as LinkButton;
        GridViewRow row = lbn.NamingContainer as GridViewRow;
        GridView grd = row.NamingContainer as GridView;
        //финиш ))
        Int32 id = 0;
        // это обращение если в DataKeyNames много перечислено полей
        Int32.TryParse(grd.DataKeys[row.RowIndex].Values[0].ToString(), out id);
       //если используешь только одно поле:
      Int32.TryParse(grd.DataKeys[row.RowIndex].Value.ToString(), out id);
    }
Добавлено через 2 минуты
Поправочка для первой части записи в последнем комментарии:
не DataKeys а DataKeyNames
1
 Аватар для mitsky
31 / 31 / 6
Регистрация: 31.12.2009
Сообщений: 82
12.03.2010, 11:55  [ТС]
сделал через DataKeys
получилось что-то на подобие...
Code
1
2
3
4
<asp:GridView ID="GVDocumentList" runat="server" ... OnRowCommand="GVDocumentList_RowCommand"
                    OnRowCreated="GVDocumentList_RowCreated" DataKeyNames="value1, value2">
                    ...
</asp:GridView>
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
25
26
27
28
29
30
31
32
33
// заполняю GridView данными
private void FillingDocumentList()
    {
        // ...
        // получаю DataTable
        // ...
        GVDocumentList.DataSource = table;
        ButtonField btnField = new ButtonField();
        btnField.Text = "Кнопка";
        btnField.CommandName = "cmdName";
        btnField.ButtonType = ButtonType.Link;
        GVDocumentList.Columns.Add(btnField);
        GVDocumentList.DataBind();
    }
 
protected void GVDocumentList_RowCreated(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            LinkButton btn = (LinkButton)e.Row.Cells[0].Controls[0];
 
            btn.CommandArgument = e.Row.RowIndex.ToString();
        }
    }
 
protected void GVDocumentList_RowCommand(object sender, GridViewCommandEventArgs e)
    {
         int index = Convert.ToInt32(e.CommandArgument);
         DataKey dk = GVDocumentList.DataKeys[index];
         // забираю нужные мне значения
         string value1 = dk.Values[0].ToString();
         string value2 = dk.Values[1].ToString();
    }
ПС: всем спасибо за помощь
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.03.2010, 11:55
Помогаю со студенческими работами здесь

В строке первый символ получает индекс 1, последний индекс 2, второй индекс 3, предпоследний индекс 4, третий индекс 5
В строке первый символ получает индекс 1, последний индекс 2, второй индекс 3, предпоследний индекс 4, третий индекс 5 и так далее. Теперь...

ListView/GridView с кнопками в строках, получить индекс нажатой кнопки
Привет! Пишу приложение на WPF, которое работает с БД с использованием EF Есть у меня Page с ListView, в котором я вывожу различные...

Получить индекс строки в массиве и изменить значение строки
Есть файл &quot;$Temp.yml&quot; &gt; В нем 76 строчек &gt; Мне надо найти строку к примеру &quot;interval&quot; &gt; Получить ее индекс в массиве &gt; Потом изменить...

В заданной квадратной матрице вывести индекс строки, полностью повторяющей все элементы первой строки
Буду очень благодарен, если кто поможет в решении задачи: В массиве размерностью NxN вывести индекс строки, которая полностью повторяет...

Изменение цвета строки gridview
Хочу создать школьный дневник с помошью GridVIew. Но никак не получается убрать границы конкрентной строки? ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru