Get clicked cell index in gridview (not datagridview) asp.net

前端 未结 1 1907
挽巷
挽巷 2021-01-22 20:31

When I click cell in gridview (not datagridview) I want to get cell index (not row index), not row index. I use asp.net - c#

相关标签:
1条回答
  • 2021-01-22 21:07

    Use the RowCreated event to register a cell-click on each cell and handle the GridView's SelectedIndexChangedEvent:

    protected void OnRowCreated(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            for (int i = 0; i < e.Row.Cells.Count; i++ )
            {
                TableCell cell = e.Row.Cells[i];
                cell.Attributes["onmouseover"] = "this.style.cursor='pointer';this.style.textDecoration='underline';";
                cell.Attributes["onmouseout"] = "this.style.textDecoration='none';";
                cell.ToolTip = "You can click this cell";
                cell.Attributes["onclick"] = string.Format("document.getElementById('{0}').value = {1}; {2}"
                   , SelectedGridCellIndex.ClientID, i
                   , Page.ClientScript.GetPostBackClientHyperlink((GridView)sender, string.Format("Select${0}", e.Row.RowIndex)));
            }
        }
    }
    
    protected void SelectedIndexChanged( Object sender, EventArgs e)
    {
        var grid = (GridView) sender;
        GridViewRow selectedRow = grid.SelectedRow;
        int rowIndex = grid.SelectedIndex;
        int selectedCellIndex = int.Parse(this.SelectedGridCellIndex.Value);
    }
    

    SelectedGridCellIndex is a hidden-field which is added declaratively on the aspx to store the selected index:

    <asp:HiddenField ID="SelectedGridCellIndex" runat="server" Value="-1" />
    <asp:GridView ID="GridView1" runat="server" 
        OnRowCreated="OnRowCreated" 
        OnSelectedIndexChanged="SelectedIndexChanged" 
        OnRowDataBound="OnRowDataBound" AutoGenerateColumns="false">
       <Columns>
         .....
    

    You need to disable event-validation for this page, otherwise ASP.NET complains:

    <%@ Page Language="C#" AutoEventWireup="true" EnableEventValidation="false" CodeBehind="Grid.aspx.cs" Inherits="CSharp_WebApp.Grid" %>
    
    0 讨论(0)
提交回复
热议问题