datagrid中使用dropdownlist编辑模版时遇到问题

前2天我做的财务管理系统中需要用到datagrid控件来显示用户信息,为了能够编辑用户信息,我参照微软的asp.net入门套件ASP.NET Time Tracker Starter Kit (VBVS)中在datagrid中使用编辑模版。 在问题没解决之前,点击datagrid中的编辑始终报下面错误:
’==================

‘===================
下面是datagrid的html文件:

<asp:datagrid id="dguserdetail" runat="server" CssClass="datagrid" Width="760" AlternatingItemStyle-BackColor="#F9F9F9"
AllowPaging="true" CellPadding="3" PageSize="15" AutoGenerateColumns="false" EnableViewState="true"            OnUpdateCommand="dguserdetail_UpdateCommand" OnEditCommand="dguserdetail_OnEdit" OnCancelCommand="dguserdetail_OnCancel">
<AlternatingItemStyle BackColor="#F9F9F9"></AlternatingItemStyle>
<HeaderStyle Font-Bold="True"></HeaderStyle>

<Columns>

<asp:TemplateColumn HeaderText="姓名">
<HeaderStyle Width="100px"></HeaderStyle>
<ItemTemplate>
<asp:label ID="username" Text='&nbsp;<%# DataBinder.Eval(Container.DataItem, "username").ToString() %> ' Runat="server" />
</ItemTemplate>
</asp:TemplateColumn>

<asp:TemplateColumn HeaderText="密码">
<ItemStyle Wrap="False"></ItemStyle>
<ItemTemplate>
<asp:label ID="password" Text='&nbsp;<%# DataBinder.Eval(Container.DataItem, "password").ToString() %> ' Runat="server" />
</ItemTemplate>
<EditItemTemplate>
<asp:textbox runat="server" CssClass="Standard-text" ID="txtpassword" Text='<%#DataBinder.Eval(Container.DataItem, "password").ToString()%>' Width="100" MaxLength="255">
</asp:textbox>
</EditItemTemplate>
</asp:TemplateColumn>

<asp:TemplateColumn HeaderText="电子邮箱">
<ItemTemplate>
<asp:label ID="email" Text='&nbsp;<%# DataBinder.Eval(Container.DataItem, "email").ToString() %> ' Runat="server" />
</ItemTemplate>
<EditItemTemplate>
<asp:textbox Width="135px" AutoPostBack=false CssClass="Standard-text" Runat="server" ID="txtemail" Text='<%# DataBinder.Eval(Container.DataItem, "email").ToString() %> ' />
<asp:regularexpressionvalidator id="RegularExpressionValidator1" runat="server" ErrorMessage="电子邮件无效" ControlToValidate="txtemail"
ValidationExpression="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"></asp:regularexpressionvalidator>
</EditItemTemplate>
</asp:TemplateColumn>

<asp:TemplateColumn HeaderText="权限">
<ItemStyle Wrap="False"></ItemStyle>
<ItemTemplate>
<asp:label ID="authority" Text='&nbsp;<%# DataBinder.Eval(Container, "DataItem.authority") %>' Runat="server" />
</ItemTemplate>
<edititemtemplate>
<asp:dropdownlist Width="100px" ID="DDauthority" DataSource='<%# bindDropDownList %>'  Runat="server">
</asp:dropdownlist>
</edititemtemplate>
</asp:TemplateColumn>

<asp:EditCommandColumn ButtonType="LinkButton" UpdateText="update" HeaderText="編辑" CancelText="cancel"
EditText="edit">
</asp:EditCommandColumn>
</Columns>
</asp:datagrid>


最初的页面显示如下:


按下编辑后的页面:
 
对于编辑列中的edit,update,cancel需要用到下面的是件:

 Protected Sub dguserdetail_OnEdit(ByVal sender As [Object], ByVal e As DataGridCommandEventArgs) Handles dguserdetail.EditCommand
'==============================
dguserdetail.EditItemIndex = e.Item.ItemIndex //'获取被选中的行索引
   'Saves current info on temporary, use later in dguserdetail_Itembound()
studatagrid.username = CType(e.Item.FindControl("username"), Label).Text.Trim
studatagrid.password 
= CType(e.Item.FindControl("password"), Label).Text.Trim
studatagrid.email 
= CType(e.Item.FindControl("email"), Label).Text.Trim
studatagrid.authority 
= CType(e.Item.FindControl("authority"), Label).Text.Trim
'=======================================
        SetBind() //'最后问题解决的关键语句
'
=======================================


'=========================================  
 ' During in-line-editing mode this selects corresponding items for dropdowns and text boxes.
'
==========================================
 Private Sub ItemDataBound(ByVal sender As Object, _
    
ByVal e As DataGridItemEventArgs) Handles dguserdetail.ItemDataBound
        
If e.Item.ItemType = ListItemType.EditItem Then
            
Dim currentCbo As DropDownList = CType(e.Item.FindControl("DDauthority"), DropDownList)
            currentCbo.SelectedIndex 
= currentCbo.Items.IndexOf(currentCbo.Items.FindByText(studatagrid.authority))

        
End If

    
End Sub
        

 '编写从 DropDownList 中检索当前选定值的代码,并执行数据库更新
    Protected Sub dguserdetail_UpdateCommand(ByVal source As ObjectByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles dguserdetail.UpdateCommand
 
Dim item As DataGridItem = dguserdetail.Items(dguserdetail.EditItemIndex)
        
If e.CommandName = "Update" Then
    
If e.Item.ItemType = ListItemType.EditItem Then '只有在编辑按下以后才能提交
                Dim username As String
                
Dim password As String
                
Dim email As String
                
Dim authority As String
                
Dim authorityId As Integer
username 
= CType(e.Item.FindControl("username"), Label).Text
password 
= CType(e.Item.FindControl("txtpassword"), TextBox).Text
email 
= CType(e.Item.FindControl("txtemail"), TextBox).Text
authority 
= CType(e.Item.FindControl("ddauthority"), DropDownList).SelectedItem.Value
authorityId 
= IIf(authority = "系统管理员"10)
' Save the dguserdetail object.
            Try
     SqlHelper.ExecuteNonQuery(strconn, 
"updateuser", username, password, email, authorityId)
            
Catch
            
End Try
End If
' Quit in-line-editing mode.
   dguserdetail.EditItemIndex = -1
   SetBind()
End If

End Sub


  '我们的取消事件是把当前所选行号设为-1. 这样就等于告诉datagrid, 不在是编辑模式了. 然后, 我们重新绑定数据.

    
Protected Sub dguserdetail_OnCancel(ByVal sender As [Object], ByVal e As DataGridCommandEventArgs) Handles dguserdetail.CancelCommand
        dguserdetail.EditItemIndex 
= -1
        SetBind()
    
End Sub
 'TimeEntryGrid_OnCancel
posted on 2005-04-30 16:07  .net  阅读(677)  评论(0编辑  收藏  举报