使用click into按钮事件在gridview中编辑行

时间:2014-03-23 01:05:07

标签: asp.net ajax vb.net gridview webforms

我的应用程序中有 gridview

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" AllowPaging="True">
        <Columns>
            <asp:TemplateField >
                <ItemTemplate>
                    <asp:Button ID="Savebtn" runat="server" Text="تحديث البيانات"  OnClick="gv_RowEditing"/>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="السعر الأقصى">
                <ItemTemplate>
                    <asp:TextBox ID="mintxt" runat="server" Text='<%#Eval("prix max")%>' />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="السعر الأدنى"  >
                <ItemTemplate>
                    <asp:TextBox ID="maxtxt" runat="server"  Text='<%#Eval("prix min")%>' />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:BoundField DataField="Datvente" HeaderText="التاريخ" SortExpression="Datvente" />
            <asp:BoundField DataField="NomAdh" HeaderText="الإسم و اللقب" SortExpression="NomAdh" />
            <asp:BoundField DataField="CodAdh" HeaderText="المنخرط" SortExpression="CodAdh" />

             <asp:TemplateField >
                <ItemTemplate>

                    <asp:HiddenField ID="Ref" runat="server"  Value='<%#Eval("Ref")%>'/>
                </ItemTemplate>
            </asp:TemplateField>


        </Columns>
    </asp:GridView>

点击进入按钮的事件:

Protected Sub gv_RowEditing(ByVal sender As Object, ByVal e As EventArgs)


        Try
            Dim min As Double = Double.Parse(GridView1.SelectedRow.Cells("mintxt").ToString())
            Dim max As Double = Double.Parse(GridView1.SelectedRow.Cells("maxtxt").ToString())
            Dim reference As String = Double.Parse(GridView1.SelectedRow.Cells("Ref").ToString())
            If min > max Then
                avis2.Text = "الصيغة خاطئة"
                Return
            End If
            DataAccessLayer.updatetraitementprix(min, max, reference)
            avis2.Text = ""
            FillingGrid(Session("region"), Session("date"), Session("speculation"))
        Catch ex As Exception
            avis2.Text = "الصيغة خاطئة"
            GridView1.Visible = True
            Return
        End Try
     Me.FillingGrid(Session("region"), Session("date"), Session("speculation"))
    End Sub

我需要获取列Ref的值以及字段maxtxtmintxt的新值。但它没有用

err

  • 这个问题的原因是什么?
  • 我该如何解决?

3 个答案:

答案 0 :(得分:2)

绝对需要RowEditing事件。你正在做的是发起一个简单的OnClick事件。所以做出这些改变。

标记(名称更改,以免您将其与RowEditing事件混淆)

<asp:TemplateField >
    <ItemTemplate>
        <asp:Button ID="Savebtn" runat="server" 
            Text="تحديث البيانات" 
            OnClick="Savebtn_Click" />
    </ItemTemplate>
</asp:TemplateField>

代码隐藏

Protected Sub Savebtn_Click(sender As Object, e As System.EventArgs)

    Dim btn As Button = CType(sender, Button)
    Dim clickedRow As GridViewRow = CType(btn.NamingContainer, GridViewRow)

    Dim minTextBox As TextBox = CType(clickedRow.FindControl("mintxt"), TextBox)
    Dim maxTextBox As TextBox = CType(clickedRow.FindControl("maxtxt"), TextBox)
    Dim refHidden As HiddenField = CType(clickedRow.FindControl("Ref"), HiddenField)

    Dim min As Double = Double.Parse(minTextBox.Text)
    Dim max As Double = Double.Parse(maxTextBox.Text)
    Dim reference As Double = Double.Parse(refHidden.Value)

    'rest of the code goes here

End Sub

答案 1 :(得分:1)

由于TextBox控件位于TemplateField的内部,因此您必须使用Control#FindControl方法来查找它们。请注意每个控件的Cell索引。

Dim tbMin As TextBox = CType(GridView1.SelectedRow.Cells(1).FindControl("mintxt"), TextBox)
Dim min As Double = Double.Parse(tbMin.Text)

答案 2 :(得分:1)

您收到此错误的原因实际上是因为 selectedrow ,因此您首先需要获取当前选定的行然后访问所有控件在那一行。

请将您的代码替换为以下内容:

Protected Sub gv_RowEditing(ByVal sender As Object, ByVal e As EventArgs)

        Try
            'First, get the saveBtn
            Dim saveBtn As Button = DirectCast(sender, Button)

            'Next, get the selected row of that button
            Dim selectedRow As GridViewRow = DirectCast(saveBtn.Parent.Parent, GridViewRow)

            'Now you can access all the controls of that row
            Dim mintxt As TextBox = DirectCast(selectedRow.FindControl("mintxt"), TextBox)
            Dim maxtxt As TextBox = DirectCast(selectedRow.FindControl("mintxt"), TextBox)
            Dim Ref As HiddenField = DirectCast(selectedRow.FindControl("Ref"), HiddenField)

            'Get the values of the controls
            Dim min As Double = Double.Parse(mintxt.Text)
            Dim max As Double = Double.Parse(maxtxt.Text)
            Dim refVal As Double = Double.Parse(Ref.Value)

            If min > max Then
                avis2.Text = "الصيغة خاطئة"
                Return
            End If
            DataAccessLayer.updatetraitementprix(min, max, refVal)
            avis2.Text = ""
            FillingGrid(Session("region"), Session("date"), Session("speculation"))
        Catch ex As Exception
            avis2.Text = "الصيغة خاطئة"
            GridView1.Visible = True
            Return
        End Try
        Me.FillingGrid(Session("region"), Session("date"), Session("speculation"))

    End Sub