2012-03-23 5 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» item item, и строка будет отменена. Поэтому я не могу копировать пароли.

Мой вопрос: Есть ли способ отменить itemcommand radgrid при определенных обстоятельствах? Я бы хотел, чтобы отключить событие itemcommand, когда пароль уже расшифрован.

Заранее благодарен!

Edit: Я предполагаю, что я также должен отметить, что я использую radajaxloadingpanel для отображения анимации по сетке, когда она загружается. Даже когда метод itemcommand ничего не делает, отображается панель ajaxloading, и текст, который я пытаюсь выделить, не выбран.

Больше редактирует:

Вот мой 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 только, просто интересно, какие команды вы используете –

+0

Спасибо за глядя на мою проблему. Я добавил код. – Msonic

ответ

2

Переключение в OnSelectedIndexChanged функции на radGrid и сохранить текущую выбранную строку в переменной clientide и обрабатывать событие с выбранным событием 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

вам нужно будет выработать C# на vb.net, который я опубликовал, только что увидел, что вы разместили свой код позади, ваш код слегка изменен, должен работать в selectedIndexChanged –

+0

Я привык к преобразованию C# в vb, не беспокойтесь. Я попробую это и вернусь к вам. Благодаря! – Msonic

+0

добавил еще один код для вас, чтобы попробовать .. enablePostBackOnRowClick и добавить клиентское событие RowSelected. Вы можете отменить обратную передачу в RowSelected, если вы повторно выбираете ту же строку, используя args.set_cancel (true); –