You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET中GridView1_SelectedIndexChanged事件无响应问题求助

ASP.NET GridView选择项无法显示到TextBox的问题解决

自学ASP.NET(通过YouTube学习),使用Visual Studio 2015开发。创建空项目,添加母版页和默认页,页面包含TextBox、GridView、ScriptManager及UpdatePanel。期望点击GridView选择按钮后,将选中项显示在TextBox中,但点击后TextBox始终为空,代码未执行预期操作。

相关代码如下:

MasterPage.master

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <asp:ContentPlaceHolder id="head" runat="server">
    </asp:ContentPlaceHolder>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">
        
        </asp:ContentPlaceHolder>
    </div>
    </form>
</body>
</html>

Default.aspx

<%@ Page Title="" enableeventvalidation="true" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
    <style type="text/css">
        .auto-style1 {
            width: 100%;
        }
    </style>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">

    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <table class="auto-style1">

                <tr>
                    <td>
                        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                    </td>
                    
                </tr>
                <tr>
                    <td>&nbsp;</td>
                    <td>&nbsp;</td>
                </tr>
                <tr>
                    <td>
                        <asp:GridView ID="GridView1" runat="server" OnSelectedIndexChanged="GridView1_SelectedIndexChanged">
                            <Columns>
                                <asp:CommandField ButtonType="Button" ShowSelectButton="True" />
                            </Columns>
                        </asp:GridView>
                    </td>
                    
                </tr>
            </table>

        </ContentTemplate>
    </asp:UpdatePanel>
</asp:Content>

Default.aspx.cs

using System;
using System.Data;
public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            DataTable tbl = new DataTable();
            tbl.Columns.Add("serial");

            for (int i = 0; i < 4; i++)
            {
                DataRow row = tbl.NewRow();
                row[0] = i + 1;
                tbl.Rows.Add(row);
            }
            GridView1.DataSource = tbl;
            GridView1.DataBind();
        }
        
    }
    protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
    {
        TextBox1.Text = GridView1.SelectedRow.Cells[0].Text;
    }
}

问题原因

你在GridView1_SelectedIndexChanged事件中使用Cells[0]获取内容,但GridView里首先添加了CommandField(选择按钮列),这一列是GridView的第0个单元格,而你要获取的serial列是第1个单元格,所以取到的是空值。

解决方法

将事件中的单元格索引从0改为1,修改后的代码如下:

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
    TextBox1.Text = GridView1.SelectedRow.Cells[1].Text;
}

如果想避免索引出错,也可以给GridView显式绑定列,这样能更清晰地控制列的位置,修改Default.aspx中的GridView部分:

<asp:GridView ID="GridView1" runat="server" OnSelectedIndexChanged="GridView1_SelectedIndexChanged">
    <Columns>
        <asp:CommandField ButtonType="Button" ShowSelectButton="True" />
        <asp:BoundField DataField="serial" HeaderText="序号" />
    </Columns>
</asp:GridView>

这样无论列顺序如何调整,都可以用更可靠的DataBinder.Eval来获取值:

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
    TextBox1.Text = DataBinder.Eval(GridView1.SelectedRow.DataItem, "serial").ToString();
}

内容的提问来源于stack exchange,提问作者mo fa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 17:15:43