我有这个gridview,我不知道里面的按钮有什么问题。 我有这个asp代码:
<asp:GridView ID="gvList" runat="server">
<Columns>
<asp:TemplateField HeaderText="User Name" HeaderStyle-ForeColor="Black" HeaderStyle-Font-Bold="true">
<ItemTemplate>
<asp:Label runat="server" ID="lblUsername" Text='<%# Eval("cUserName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Dept User" HeaderStyle-ForeColor="Black" HeaderStyle-Font-Bold="true">
<ItemTemplate>
<asp:Label runat="server" ID="lblDept" Text='<%# iif(Eval("lDeptUser"),"Yes","No") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Actions" HeaderStyle-ForeColor="black" HeaderStyle-Font-Bold="true">
<ItemTemplate>
<asp:Button ID="btnedit" runat="server" Text="Edit" />
<asp:Button ID="btnDelete" OnClick="DeleteRow" runat="server" Text="Delete" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
当我在任何一行按删除或编辑时,它给了我错误! Invalid postback or callback argument.
这是我在vb.net中的服务器端代码:
Public Function GetList() As DataTable
Dim Query As String = "Select cUserName,lDeptUser FROM Intranet.dbo.Gn_ISCoordinators"
Dim dt As DataTable = New DataTable()
Using adapter = New SqlDataAdapter(Query, ConfigurationManager.ConnectionStrings("IntranetConnectionString").ConnectionString)
adapter.Fill(dt)
gvList.DataSource = dt
gvList.DataBind()
Return dt
End Using
End Function
Public Function DelRow() As DataTable
Dim strusername As String = CType(gvList.FindControl("lblUsername"), Label).Text.Trim()
Dim Query As String = "Delete FROM Intranet.dbo.Gn_ISCoordinators where cUserName='" & strusername & "'"
Dim dt As DataTable = New DataTable()
Using Adapter = New SqlDataAdapter(Query, ConfigurationManager.ConnectionStrings("IntranetConnectionString").ConnectionString)
Adapter.Fill(dt)
Return dt
End Using
End Function
Protected Sub DeleteRow(ByVal sender As Object, ByVal e As System.EventArgs)
DelRow()
End Sub
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
GetList()
End Sub
Protected Sub gv(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvList.RowDataBound
e.Row.Cells(3).Visible = False
e.Row.Cells(4).Visible = False
End Sub
End Class
我认为它来自客户端。请帮我解决这个问题。
顺便说一下,我到目前为止还没有使用任何ajaxtoolkit,页面中的EnableEventValidation="true"
以及web.config
有什么问题及其解决方案,请帮助我。
提前感谢。
答案 0 :(得分:1)
您无法使用此功能调用。因为
CType(gvList.FindControl("lblUsername"), Label).Text.Trim()
仅允许按钮点击事件。那么按钮点击事件本身内的功能代码也是如此。
答案 1 :(得分:1)
首先,我将代码包装在Page_Load
:
If Not IsPostBack Then GetList()
所以你只想在第一次加载时数据绑定网格,而不是在回发上。默认情况下,状态将通过ViewwState
维护。
DeleteRow
中的下一个问题,您正试图通过FindControl
上的GridView
找到标签。但NamingContainer
的{{1}}是GridViewRow
,因为GridView
包含多行(和标签)而不只是一行。
所以你必须先得到对行的引用。只需使用NamingContainer
的{{1}}:
Button