Asp.net 行编辑事件处理程序问题 > 受保护的无效GridView1_行编辑(对象发送方,GridViewEditEventArgs e) { SqlDataSource1.UpdateCommandType=SqlDataSourceCommandType.Text; GridViewRow row=GridView1.Rows[e.NewEditIndex]; TextBox txt=(TextBox)row.FindControl(“TextBox2”); SqlDataSource1.UpdateParameters[“CpuName”].DefaultValue=txt.Text; SqlDataSource1.UpdateParameters[“cpuid”].DefaultValue=“3”; SqlDataSource1.Update(); BindGridView(); }

Asp.net 行编辑事件处理程序问题 > 受保护的无效GridView1_行编辑(对象发送方,GridViewEditEventArgs e) { SqlDataSource1.UpdateCommandType=SqlDataSourceCommandType.Text; GridViewRow row=GridView1.Rows[e.NewEditIndex]; TextBox txt=(TextBox)row.FindControl(“TextBox2”); SqlDataSource1.UpdateParameters[“CpuName”].DefaultValue=txt.Text; SqlDataSource1.UpdateParameters[“cpuid”].DefaultValue=“3”; SqlDataSource1.Update(); BindGridView(); },asp.net,Asp.net,我得到的对象引用没有设置为文本框txt上的对象。我无法在gridview中获取文本框2。你能试试这个吗 <asp:GridView ID="GridView1" runat="server" style="height: 121px; width: 175px" BackColor="White" BorderColor="#3366CC" BorderStyle="None" BorderWidth="1px" CellPadding="4"

我得到的对象引用没有设置为文本框txt上的对象。我无法在gridview中获取文本框2。

你能试试这个吗

<asp:GridView ID="GridView1" runat="server"  
        style="height: 121px; width: 175px" BackColor="White" 
        BorderColor="#3366CC" BorderStyle="None" BorderWidth="1px" CellPadding="4" 
        onrowediting="GridView1_RowEditing" AutoGenerateColumns="false">
        <Columns>
        <asp:CommandField ButtonType="Button" SelectText="Edit" ShowEditButton="true" />
        <asp:TemplateField>
        <ItemTemplate>
        <asp:Label ID="lblId" runat="server" Text='<%# Eval("Id") %>'></asp:Label>
        </ItemTemplate>
        <EditItemTemplate>
            <asp:TextBox ID="TextBox1" runat="server" Text='<%# Eval("Id") %>'></asp:TextBox>
        </EditItemTemplate>

        </asp:TemplateField>

        <asp:TemplateField>
        <ItemTemplate>
        <asp:Label ID="lblCpuName" runat="server" Text='<%# Eval("cpuname") %>'></asp:Label>
        </ItemTemplate>
        <EditItemTemplate>
            <asp:TextBox ID="TextBox2" runat="server" Text='<%# Eval("cpuname") %>'></asp:TextBox>
        </EditItemTemplate>
        </asp:TemplateField>



        <asp:TemplateField>
        <ItemTemplate>
        <asp:Label ID="lblStatus" runat="server" Text='<%# Eval("status") %>'></asp:Label>
        </ItemTemplate>
        <EditItemTemplate>
            <asp:TextBox ID="TextBox3" runat="server" Text='<%# Eval("status") %>'>></asp:TextBox>
        </EditItemTemplate>
        </asp:TemplateField>

        </Columns>

    </asp:GridView>


protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
        {
            SqlDataSource1.UpdateCommandType = SqlDataSourceCommandType.Text;
            GridViewRow row = GridView1.Rows[e.NewEditIndex];
            TextBox txt = (TextBox)row.FindControl("TextBox2");
            SqlDataSource1.UpdateParameters["CpuName"].DefaultValue = txt.Text;
            SqlDataSource1.UpdateParameters["cpuid"].DefaultValue = "3";
            SqlDataSource1.Update();
            BindGridView();

        }

为什么不直接获取文本框的值?这是个大问题吗

GridViewRow row = GridView1.Rows[GridView1.NewEditIndex];
TextBox txt = row.Cells[1].Controls[1] as TextBox;  
If (txt!= null)
{
    SqlDataSource1.UpdateParameters["CpuName"].DefaultValue = txt.Text;
    SqlDataSource1.UpdateParameters["cpuid"].DefaultValue = "3";
    SqlDataSource1.Update();
    BindGridView();
}

我不知道这是否有效,因为我是一名C#er,基本上是在winform上工作,而不是在web应用程序上工作。首先,这里是MSDN的片段,行编辑主题:

当 单击行的“编辑”按钮,但 在GridView控件进入 编辑模式。这使您能够提供 执行以下操作的事件处理方法: 自定义例程,如取消 编辑操作,无论何时 事件发生

要解决此问题,请为此处理RowUpdate事件。以下是一个对您有帮助的示例:

此外,我认为您应该使用Bind单词将文本框绑定到字段:

'>


有关更多详细信息,请参阅

无法将“System.Web.UI.WebControl.Label”类型的对象强制转换为“System.Web.UI.WebControl.TextBox”类型。您能告诉我此cpuName字段在Gridview中显示的是哪一列吗?它显示在第二列中我是指在运行时显示的是哪一列。是否在运行应用程序时显示为第3列?您尚未更新。它仍然给出相同的标签转换错误
 ...
GridViewRow row = GridView1.Rows[e.NewEditIndex];
SqlDataSource1.UpdateParameters["CpuName"].DefaultValue = row.Columns["CpuName"].Value;
...