行编辑事件处理程序问题

时间:2011-07-10 13:27:37

标签: asp.net

<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();

        }

我得到的对象引用未设置为textbox txt上的对象。我无法在gridview中获取textbox2。

3 个答案:

答案 0 :(得分:0)

你能试试吗

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();
}

答案 1 :(得分:0)

为什么你没有直接获得文本框值?这是一个很大的问题吗?

 ...
GridViewRow row = GridView1.Rows[e.NewEditIndex];
SqlDataSource1.UpdateParameters["CpuName"].DefaultValue = row.Columns["CpuName"].Value;
...

我不知道这是有效的,因为我是C#-er,基本上工作在winform而不是网络应用上

答案 2 :(得分:0)

首先,这是MSDN的片段,RowEditing主题:

  

当a时引发RowEditing事件   单击行的编辑按钮,但是   在GridView控件进入之前   编辑模式。这使您可以提供   执行的事件处理方法   自定义例程,例如取消   编辑操作,无论何时   事件发生。

要解决此问题,请为此目的处理RowUpdating事件。有一个例子应该对您有所帮助:

GridView.RowEditing event

另外,我相信您应该使用Bind一词将TextBox绑定到一个字段:

            “&GT;         

有关详细信息,请参阅Data-Binding Expressions Overview