.NET - SelectedRow не возвращает никакого значения - PullRequest
0 голосов
/ 21 декабря 2018

Я новичок в .net!

У меня есть два вида сетки, подключенных к большой базе данных.Первый возвращает список проблем, по которым выполняется поиск по идентификатору, а второй возвращает вопросы, по которым выполняется поиск по теме.

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

Я пробовал несколько методов, и это то, что у меня сейчас.Какие-либо предложения?

    Protected Sub IssuesGV_SelectedIndexChanging(ByVal sender As Object, ByVal e As GridViewSelectEventArgs)
        Dim pName As String
        pName = IssuesGV.SelectedRow.Cells(0).Text
        BindGridComments(pName)
    End Sub

    Protected Sub IssuesGV_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
        If e.Row.RowType = DataControlRowType.DataRow Then
            e.Row.Attributes("onmouseover") = "this.style.backgroundColor='aquamarine';"
            e.Row.Attributes("onmouseout") = "this.style.backgroundColor='white';"
            e.Row.ToolTip = "Click last column for selecting this row."
            ' e.Row.Cells(0).Attributes.Add("onclick", )
        End If
    End Sub
Protected Sub IssuesGV_RowCommand(sender As Object, e As GridViewCommandEventArgs)


        ' ' Dim row As GridViewRow = IssuesGV.Rows(rowIndex)

        '     v = row.Cells(1).Text
        'v = IssuesGV.SelectedRow.Cells(0).Text
        ' TextBox1.Text = v
        'TextBox1.Text = v

        If (e.CommandName = "Select1") Then
            Dim index As Int16
            index = Convert.ToInt32(e.CommandArgument)
            Dim row As GridViewRow
            row = IssuesGV.Rows(index)
            Dim item As ListItem
            item.Text = Server.HtmlDecode(row.Cells(0).Text)
        End If




    End Sub

Мой код просмотра сетки следующий (тот, где я использую кнопку выбора):

 <asp:GridView ID="IssuesGV" runat="server" AutoPostBack="true" OnRowCommand ="IssuesGV_RowCommand" OnRowDataBound="IssuesGV_RowDataBound" OnSelectedIndexChanged = "IssuesGV_OnSelectedIndexChanged" SelectedIndexChaning ="IssuesGV_SelectedIndexChanging" AutoGenerateColumns="False" DataKeyNames="number" DataSourceID="IssueDS" EnableModelValidation="True">
            <Columns>
                <asp:BoundField DataField="number" HeaderText="number" ReadOnly="True" SortExpression="number" />
                <asp:BoundField DataField="subject" HeaderText="subject" SortExpression="subject" />
                <asp:BoundField DataField="description" HeaderText="description" SortExpression="description" />
                <asp:BoundField DataField="created_at" HeaderText="created_at" SortExpression="created_at" />
                <asp:BoundField DataField="opener_name" HeaderText="opener_name" SortExpression="opener_name" />
                <asp:BoundField DataField="project_name" HeaderText="project_name" SortExpression="project_name" />
                <asp:ButtonField Text="Select" CommandName="Select1" ItemStyle-Width="30" ButtonType="Button" HeaderText="Select" ShowHeader="True" SortExpression="number"  >
                <ItemStyle Width="30px" />
                </asp:ButtonField>
            </Columns>
        </asp:GridView>

Я получаю следующую ошибку:

System.ArgumentOutOfRangeException HResult = 0x80131502
Сообщение = Индекс был вне диапазона.Должен быть неотрицательным и меньшим, чем размер коллекции.Имя параметра: index Source = StackTrace:

Большое спасибо!

1 Ответ

0 голосов
/ 25 декабря 2018

Front End:

Ваш GridView должен выглядеть следующим образом:

<asp:GridView ID="IssuesGV" runat="server" AutoGenerateColumns="false" 
    OnSelectedIndexChanged="IssuesGV_OnSelectedIndexChanged">
    <Columns>
        <asp:BoundField DataField="number" HeaderText="number" />

            ...Some Other Fields

        <asp:ButtonField Text="Select" CommandName="Select" ItemStyle-Width="150" />
    </Columns>
</asp:GridView>

Back End:

Затем добавьте этот код OnSelectedIndexChanged GridView:

Protected Sub IssuesGV_OnSelectedIndexChanged(sender As Object, e As EventArgs)
    'Accessing Selected BoundField Column
    Dim number As String = IssuesGV.SelectedRow.Cells(0).Text

    label.Text = "<b>Number Value:</b> " & number & " <b>"
End Sub

Ссылка: См. Полный пример здесь .


Редактировать

По какой-то причине, если OnSelectedIndexChanged методне срабатывает, тогда вам просто нужно добавить ниже атрибут в разметке заголовка GridView:

AutoGenerateSelectButton="True"

Это создаст ссылку Select в ваших строках GridView, которая вызовет метод OnSelectedIndexChanged.

PS: Если прежде всего обходные пути не работают, см. Этот пост .

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