Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net onCommand on按钮在gridView内未触发?_.net_Vb.net_Session_Gridview_Button - Fatal编程技术网

.net onCommand on按钮在gridView内未触发?

.net onCommand on按钮在gridView内未触发?,.net,vb.net,session,gridview,button,.net,Vb.net,Session,Gridview,Button,这真的快把我逼疯了。我在gridview中有一个按钮,可以从gridview中删除该项(它的数据源是一个列表)。每当对列表进行更改时,我都会将列表保存到会话中,并在页面上加载检查该会话变量是否为空,如果不是,则将该列表设置为绑定到gridview 代码隐藏: Public accomplishmentTypeDao As New AccomplishmentTypeDao() Public accomplishmentDao As New AccomplishmentDao() Public u

这真的快把我逼疯了。我在gridview中有一个按钮,可以从gridview中删除该项(它的数据源是一个列表)。每当对列表进行更改时,我都会将列表保存到会话中,并在页面上加载检查该会话变量是否为空,如果不是,则将该列表设置为绑定到gridview

代码隐藏:

Public accomplishmentTypeDao As New AccomplishmentTypeDao()
Public accomplishmentDao As New AccomplishmentDao()
Public userDao As New UserDao()
Public facultyDictionary As New Dictionary(Of Guid, String)
Public facultyList As New List(Of User)
Public associatedFaculty As New List(Of User)
Public facultyId As New Guid

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    'If Not Session("associatedFaculty") Is Nothing Then'
    '   Dim associatedFacultyArray As User() = DirectCast(Session("associatedFaculty"), User())'
    '   associatedFaculty = associatedFacultyArray.ToList()'
    'End If'

    Page.Title = "Add a New Faculty Accomplishment"

    ddlAccomplishmentType.DataSource = accomplishmentTypeDao.getEntireTable()
    ddlAccomplishmentType.DataTextField = "Name"
    ddlAccomplishmentType.DataValueField = "Id"
    ddlAccomplishmentType.DataBind()

    facultyList = userDao.getListOfUsersByUserGroupName("Faculty")

    For Each faculty As User In facultyList
        facultyDictionary.Add(faculty.Id, faculty.LastName & ", " & faculty.FirstName)
    Next

    If Not Page.IsPostBack Then
        ddlFacultyList.DataSource = facultyDictionary
        ddlFacultyList.DataTextField = "Value"
        ddlFacultyList.DataValueField = "Key"
        ddlFacultyList.DataBind()
    End If

    gvAssociatedUsers.DataSource = associatedFaculty
    gvAssociatedUsers.DataBind()

End Sub

Protected Sub deleteUser(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.CommandEventArgs)
    facultyId = New Guid(e.CommandArgument.ToString())
    associatedFaculty.Remove(associatedFaculty.Find(Function(user) user.Id = facultyId))
    Session("associatedFaculty") = associatedFaculty.ToArray()
    gvAssociatedUsers.DataBind()
    upAssociatedFaculty.Update()
End Sub

Protected Sub btnAddUser_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnAddUser.Click
    facultyId = New Guid(ddlFacultyList.SelectedValue)
    associatedFaculty.Add(facultyList.Find(Function(user) user.Id = facultyId))
    Session.Add("associatedFaculty", associatedFaculty.ToArray())
    gvAssociatedUsers.DataBind()
    upAssociatedFaculty.Update()
End Sub

Protected Sub Delete(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.CommandEventArgs)

End Sub
末级

标记:

<asp:UpdatePanel ID="upAssociatedFaculty" runat="server" 
    UpdateMode="Conditional">
    <ContentTemplate>
<p><b>Created By:</b> <asp:Label ID="lblCreatedBy" runat="server"></asp:Label></p>
<p><b>Accomplishment Type: </b><asp:DropDownList ID="ddlAccomplishmentType" runat="server"></asp:DropDownList></p>

        <p><b>Accomplishment Applies To: </b><asp:DropDownList ID="ddlFacultyList" runat="server"></asp:DropDownList>
            &nbsp;<asp:Button ID="btnAddUser" runat="server" Text="Add Faculty" OnClientClick="incrementCounter();" /></p>

        <p>
            <asp:GridView ID="gvAssociatedUsers" runat="server" AutoGenerateColumns="false" 
                GridLines="None" ShowHeader="false">
                <Columns>
                     <asp:BoundField DataField="Id" HeaderText="Id" Visible="False" />
                     <asp:TemplateField ShowHeader="False">
                         <ItemTemplate>
                             <span style="margin-left: 15px;">
                                <p><%#Eval("LastName")%>, <%#Eval("FirstName")%>
                                <asp:Button ID="btnUnassignUser" runat="server" CausesValidation="false" 
                                     CommandArgument='<%# Eval("Id") %>' CommandName="Delete" OnCommand="deleteUser" Text='Remove' /></p>
                             </span>
                         </ItemTemplate>
                     </asp:TemplateField>
                 </Columns>
                 <EmptyDataTemplate>
                     <em>There are currently no faculty associated with this accomplishment.</em>
                 </EmptyDataTemplate>
            </asp:GridView>
        </p>
    </ContentTemplate>
</asp:UpdatePanel>

创建人:

成就类型:

成就适用于:

,,

目前没有与这一成就相关的教员。

现在有一个疯狂的部分让我很困惑,如果我取消对页面加载的
if Not Session…
块的注释,那么当单击
btunassignuser
时,
deleteUser
将永远不会触发。如果我不把它注释掉……它不会引发任何问题,但是当然,我的列表不能有多个项目,因为我没有将保存的列表从会话加载到gridview中,而只是一个新的列表。但是按钮点击正在被注册,因为当我在调试模式下查看时,页面加载正在再次进行,只是deleteUser从不触发


为什么会发生这种情况??我该如何修复它???

您不想继续重新绑定网格。您希望网格再次拥有数据源,但不希望重置

   gvAssociatedUsers.DataSource = associatedFaculty
   if (!Page.IsPostBack)
       gvAssociatedUsers.DataBind()

好吧,这奏效了,但我不明白为什么?在我的
btnAddUser\u上,单击
deleteUser
在数据源中添加某些内容后,我正在重新绑定数据,如果我没有这些内容,列表将永远不会更新。因此,在页面加载中,只要会话列表中有内容,这就是我在加载时绑定的内容,那么这又有什么关系呢?第二,为什么这会影响我的按钮事件不被触发?当你重新绑定时,你正在创建新的偶数处理程序。旧的被清除了