проблема срабатывания selected_indexchanged (невозможно даже распечатать значение ячейки в виде сетки при любом событии) - PullRequest
1 голос
/ 08 июня 2011

// код в aspx.

<Columns>
<asp:BoundField DataField="Name" HeaderText="Name" />
<asp:BoundField DataField="City" HeaderText="City" />
<asp:BoundField DataField="MobilePhone" 
    HeaderText="Mobile Phone" />
        <asp:ButtonField Text="Button" ButtonType="Button" CommandName="Select" />
</Columns>
</asp:GridView>
   <asp:Label ID="Label" runat="server" Text="Label"></asp:Label>

// код файла ()

protected void grid_SelectedIndexChanged(object sender, 
EventArgs e)
{
int selectedRowIndex;
selectedRowIndex = grid.SelectedIndex;
GridViewRow row = grid.Rows[selectedRowIndex];
string name = row.Cells[0].Text;
Label.Text = "You selected " + name + ".";
}

В: Я даже не могу напечатать выбранную строку. Если кто-то может помочьмне с этим вопросом.

Ответы [ 2 ]

0 голосов
/ 10 ноября 2011

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

    protected void grid_SelectedIndexChanged(object sender, EventArgs e)
    {
        GridViewRow row = (GridViewRow)grid.Rows[grid.SelectedIndex];
        string name = ((Label)row.Cells[1].Controls[1]).Text;
        Label.Text = "You selected " + name + ".";
    }

, но... это довольно грязный способ достижения этого.Также «Label» - довольно плохое название для лейбла.Кроме того, ячейка [0], которую вы опубликовали, скорее всего, будет столбцом с кнопкой выбора, а не столбцом с нужным значением.И, как только вы окажетесь в правильной ячейке, есть 3 элемента управления, 2 литерала и метка для нормального ограниченного поля.Элемент управления [1], второй элемент управления, является элементом управления меткой, который будет иметь искомое значение.

0 голосов
/ 08 июня 2011

Вы должны использовать событие RowCommand вместо события SelectedIndexChanged.

 protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "Select")
    {
        GridViewRow row = ((GridViewRow)((Button)e.CommandSource).NamingContainer);
        string name = row.Cells[0].Text;
        Label.Text = "You selected " + name + ".";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...