2012-03-23 22 views
1

我有一个Telerik的radgrid控件,如所示下面Telerik的文本选择

| Username | Password | 
------------------------- 
| A_user | *****  | 
| A_user2 | *****  | 
| A_user3 | *****  | 

当我点击行之一,它会显示点击行的密码,就像这样:

| Username | Password | 
------------------------- 
| A_user | *****  | 
| A_user2 | A password | 
| A_user3 | *****  | 

这工作正常。我正在继续这种方式,因为密码的解密是一个相当复杂和漫长的过程,因此一次解密一个密码不会耗费时间,特别是当用户不需要所有密码时。

当我显示密码时,我希望能够在网格中选择密码来复制它。不幸的是,radgrid会再次激发“RowClick”itemcommand,并且该行被取消选中。因此,我无法复制密码。

我的问题是:有没有办法在某些情况下取消radgrid的itemcommand? 我希望能够在密码已解密时禁用itemcommand事件。

在此先感谢!

编辑: 我想我也应该提的是,我使用的是radajaxloadingpanel显示在网格的动画时,它的加载。即使itemcommand方法不执行任何操作,也会显示ajaxloadingpanel,并且我尝试突出显示的文本被取消选定。

更多编辑:

这里是我的radgrid控件的代码

<telerik:RadGrid id="radGridAccounts" runat="server" Width="99%" PageSize="20" AllowPaging="true" AllowSorting="true" 
         AllowFilteringByColumn="True" ShowStatusBar="true" EnableLinqExpressions="False" GridLines="None" 
         AllowMultiRowSelection="false"> 

         <ClientSettings EnableRowHoverStyle="true" EnablePostBackOnRowClick="true" AllowKeyboardNavigation="false"> 
          <Selecting AllowRowSelect="True" /> 
          <KeyboardNavigationSettings EnableKeyboardShortcuts="false" /> 
         </ClientSettings> 
     <PagerStyle Mode="NextPrevAndNumeric" PagerTextFormat=""/> 

     <MasterTableView AutoGenerateColumns="False" EditMode="InPlace" CommandItemDisplay="Top" 
          InsertItemDisplay="Top" AllowFilteringByColumn="True" NoMasterRecordsText="Aucun compte" 
          InsertItemPageIndexAction="ShowItemOnCurrentPage" DataKeyNames="USERN" > 


     <Columns> 
     <%--Username--%> 
     <telerik:GridBoundColumn UniqueName="USERN" DataField="USERN" HeaderText="Username" 
            AllowFiltering="true" ColumnEditorID="radUsernameEditor"/> 
     <%--Password--%> 
     <telerik:GridBoundColumn UniqueName="PASWR" DataField="PASWR" HeaderText="Password" 
            AllowFiltering="false" ColumnEditorID="radPasswordEditor" /> 
     <%--Edit--%> 
     <telerik:GridEditCommandColumn ButtonType="ImageButton" 
            InsertImageUrl=".\Images\ok.gif" UpdateImageUrl=".\Images\ok.gif" CancelImageUrl=".\Images\cancel.gif" /> 
     <%--Delete--%> 
     <telerik:GridButtonColumn ButtonType="ImageButton" CommandName="Delete" Text="Delete" 
           ImageUrl=".\Images\delete.gif" /> 
     </Columns> 
    <CommandItemSettings AddNewRecordText="" RefreshText="" /> 

    </MasterTableView> 
</telerik:RadGrid> 

我的ItemCommand代码:

Protected Sub radGridAccounts_ItemCommand(ByVal sender As Object, ByVal e As Telerik.Web.UI.GridCommandEventArgs) Handles radGridAccounts.ItemCommand 

Try 

    If (e.CommandName = "RowClick" AndAlso TypeOf e.Item Is GridDataItem) Then 
     e.Item.Selected = True 

     For Each item As GridDataItem In radGridAccounts.Items 

      If Not item.IsInEditMode Then 
       If item.Selected Then 
        'Decrypt the password method 
       Else 
        item.Cells(4).Text = "*****" 
       End If 

      End If 

     Next 

    End If 

Catch ex As Exception 
    DisplayMessage("Error : " & ex.Message, MessageType.Err) 
End Try 

End Sub 
+0

可以只张贴您的radgrid控件的代码,只是有兴趣在你使用 – 2012-03-23 14:44:32

+0

谢谢你看进我的问题命令。我已经添加了代码。 – Msonic 2012-03-23 14:57:51

回答

2

切换到OnSelectedIndexChanged功能的radgrid控件和存储当前选定行在客户端变量中,并处理rowSelected客户端事件并取消或允许回发发生,还要添加您要使用的ClientDataKeyName。

<telerik:RadGrid id="radGridAccounts" runat="server" Width="99%" PageSize="20" AllowPaging="true" AllowSorting="true" OnSelectedIndexChanged="RadGridAccounts_SelectedIndexChanged" 
         AllowFilteringByColumn="True" ShowStatusBar="true" EnableLinqExpressions="False" GridLines="None" 
         AllowMultiRowSelection="false"> 

         <ClientSettings EnableRowHoverStyle="true" EnablePostBackOnRowClick="true" EnableAllowKeyboardNavigation="false"> 
          <Selecting AllowRowSelect="True" /> 
          <KeyboardNavigationSettings EnableKeyboardShortcuts="false" /> 
    <ClientEvents OnRowSelected="rowSelected" /> 
    </ClientSettings> 
     <PagerStyle Mode="NextPrevAndNumeric" PagerTextFormat=""/> 

     <MasterTableView AutoGenerateColumns="False" EditMode="InPlace" CommandItemDisplay="Top" 
          InsertItemDisplay="Top" AllowFilteringByColumn="True" NoMasterRecordsText="Aucun compte" 
          InsertItemPageIndexAction="ShowItemOnCurrentPage" DataKeyNames="USERN" ClientDataKeyNames="USERN" > 


     <Columns> 
     ... 
     </Columns> 
    <CommandItemSettings AddNewRecordText="" RefreshText="" /> 

    </MasterTableView> 
</telerik:RadGrid> 



<script type="text/javascript"> 
var selectedUserName;//global js var 
    function rowSelected(senders, args) 
    { 
     //get the ClientDataKeyName 
     var rowUserName= args.getDataKeyValue("USERN"); 
     if(selectedUserName == rowUserName){ 
       args.set_cancel(true);//cancel the postback 
     } 
    } 
</script> 

然后在服务器端:

protected void RadGridAccounts_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     if (RadGridAccounts.SelectedItems == null || RadGridAccounts.SelectedItems.Count == 0) 
      return; 

     var dataItem = RadGridAccounts.SelectedItems[0] as GridDataItem; 
     if (dataItem != null) 
     { 
      //do the password look up 
     } 
    } 
+0

你将不得不编制我发布的vb.net的c#,只是看到你发布了你的代码,稍微调整了你的代码应该在selectedIndexChanged中工作 – 2012-03-23 15:04:16

+0

我习惯于将c#转换为vb,无后顾之忧。我会尝试一下并回复你。谢谢! – Msonic 2012-03-23 15:07:08

+0

添加了更多的代码供您尝试.. enablePostBackOnRowClick并添加客户端事件RowSelected。如果您正在重新选择使用args.set_cancel(true)的同一行,则可以取消RowSelected上的回发。 – 2012-03-23 15:48:20