如何在asp.net中的DataViewGrid行上创建一个以行索引为参数的onclick处理程序

How can I make an onclick handler with a row index as parameter, on a DataView Grid row in asp.net?

本文关键字:索引 参数 程序 处理 onclick 一个以 asp net 中的 DataViewGrid 创建      更新时间:2023-09-26

我有一个ASP.net数据视图网格,我希望每一行都有一个用onclick属性和光标指针编写的函数。

当文件被编译并在浏览器中打开时,行应该如下所示:

<tr onclick = 'update( 1 )'>
<td>..... </td>
</tr>
<tr onclick = 'update ( 2 )' 
<td>..... </td>
</tr>

等等。

您可以在Gridview的RowDataBound事件中执行此操作。

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        e.Row.Attributes.Add("onclick", "javascript:alert('Hello');");
        e.Row.Style.Add("cursor", "pointer");         
    }
}

相反,为什么不能在datagridview的SelectedIndexChanged()事件中编写所需的功能?你也可以像这个一样设置所选索引的样式

<SelectedItemStyle Font-Size="10px" Font-Names="Verdana" HorizontalAlign="Left" ForeColor="Black" VerticalAlign="Middle" BackColor="Gold"></SelectedItemStyle>

此onclick事件。。这是指向自定义javascript函数吗?意思update(1)是客户端javascript函数吗?

当单击数据网格视图的一行时,您希望执行一些服务器端操作。。这就是方法。。。

  1. 在datagridview中添加一个select命令列:这将使用户能够选择一行
  2. 在datagridview的onSelectedIndexChanged事件处理程序中编写您想要执行的任何操作

以下是gridview的aspx。

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
    DataKeyNames="Id" DataSourceID="SqlDataSource1" 
    EmptyDataText="There are no data records to display." BackColor="White" 
    BorderColor="#999999" BorderStyle="Solid" BorderWidth="1px" CellPadding="3" 
    ForeColor="Black" GridLines="Vertical" 
    onselectedindexchanged="GridView1_SelectedIndexChanged">
    <Columns>
        <asp:CommandField ShowSelectButton="True" />
        <asp:BoundField DataField="Id" HeaderText="Id" ReadOnly="True" 
            SortExpression="Id" />
        <asp:BoundField DataField="UserId" HeaderText="UserId" 
            SortExpression="UserId" />
        <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
        <asp:BoundField DataField="Date" HeaderText="Date" SortExpression="Date" />
    </Columns>
    <FooterStyle BackColor="#CCCCCC" />
    <PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
    <SelectedRowStyle BackColor="#000099" Font-Bold="True" ForeColor="White" />
    <HeaderStyle BackColor="Black" Font-Bold="True" ForeColor="White" />
    <AlternatingRowStyle BackColor="#CCCCCC" />
</asp:GridView>

注意columns标签中的

您的事件处理程序将像。。。 protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) { //Write whatever you want here }

您可以在RowDataBound事件中使用e.Row访问tr,使用e.Row.RowIndex访问索引。如果要访问对象的实际Id或旧值,则可以使用e.Row.DataItem访问绑定数据。

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if(e.Row.RowType == DataControlRowType.DataRow )
    {            
        var theItem = e.Row.DataItem as MyItemType;
        e.Row.Attributes.Add("onclick","update('" + e.Row.RowIndex + "')");
        e.Row.Style.Add("cursor", "pointer"); 
    }
}

行集合的索引从0开始,因此如果希望索引从1开始,则需要将1添加到RowIndex。