Добавить событие OnClick для вида сетки asp.net - PullRequest
1 голос
/ 17 августа 2011

Я добавил новое событие, т.е. событие Gridview_Onclick, динамически в событии RowDatabound.Но когда я пытаюсь обработать это событие в коде на стороне сервера, я могу написать код для этого события.Это код для моего вида сетки.

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="PopUp.ascx.cs" Inherits="PopUp" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>

<table class="style1">
<tr>
    <td>
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
            CellPadding="4" ForeColor="#333333" GridLines="None" 
            onrowdatabound="GridView1_RowDataBound">
            <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
            <Columns>
                <asp:BoundField DataField="DeptId" HeaderText="ID"/>
                <asp:BoundField DataField="Name" HeaderText="Name"/>
                <asp:BoundField DataField="HeadName" HeaderText="HOD"/>
                <asp:BoundField DataField="HeadEmail" HeaderText="Email ID"/>
            </Columns>
            <EditRowStyle BackColor="#999999" />
            <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
            <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
            <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
            <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
            <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
            <SortedAscendingCellStyle BackColor="#E9E7E2" />
            <SortedAscendingHeaderStyle BackColor="#506C8C" />
            <SortedDescendingCellStyle BackColor="#FFFDF8" />
            <SortedDescendingHeaderStyle BackColor="#6F8DAE" />
        </asp:GridView>
        <asp:Button ID="btnTest" runat="server" style="display:none" />
    </td>
</tr> 
</table>

Это код для моей страницы ascs.cs

protected void Page_Load(object sender, EventArgs e)
{
    oCommand.CommandText = "select * from Department";
    oCommand.Connection = oConnection;
    oAdapter.SelectCommand = oCommand;
    DataTable dt = new DataTable();
    oAdapter.Fill(dt);
    GridView1.DataSource = dt;
    GridView1.DataBind();
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    e.Row.Attributes["OnClick"] = Page.ClientScript.GetPostBackClientHyperlink(e.Row, string.Empty);
}
protected void GridView1_OnClick(object sender, GridViewRowEventArgs e)
{
    _ID = "10";
    _Name = "abc";
    _HOD = "abc";
    _Email = "abc";
}

Вид сетки открывается в modelpopupextender, поэтому, когда я нажимаю в любом месте сетки, его закрытие, которое не является случаем, я удаляю событие, которое добавляется динамически.Короче говоря, событие добавлено, но не может быть обработано в коде.Подскажите пожалуйста, как мне поймать это событие в кодировке ??

1 Ответ

1 голос
/ 17 августа 2011

Вам необходимо внести следующие изменения в свой код: 1)

 e.Row.Attributes["OnClick"] = Page.ClientScript.GetPostBackClientHyperlink(**btnTest**, string.Empty);

2)

 protected void GridView1_OnClick(object sender, **EventArgs** e)

3) <asp:Button ID="btnTest" runat="server" Style="display: none" **OnClick="GridView1_OnClick"** />

Почему?

Причина в том, что GridViewRow не реализует IPostBackEventHandler, поэтому не запускает события обратной передачи. Но кнопка может. В этом случае btnTest - это фиктивная кнопка для запуска события.

...