Telerik выбор текста
У меня есть Telerik Radgrid, как показано ниже
| Username | Password |
-------------------------
| A_user | ***** |
| A_user2 | ***** |
| A_user3 | ***** |
Когда я щелкаю одну из строк, она отображает пароль выбранной строки, например:
| Username | Password |
-------------------------
| A_user | ***** |
| A_user2 | A password |
| A_user3 | ***** |
Это отлично работает. Я продолжаю в том же духе, потому что расшифровка пароля является довольно сложным и длительным процессом, поэтому расшифровка одного пароля за раз занимает меньше времени, особенно когда пользователю не нужны все пароли.
Когда у меня отобразится пароль, я бы хотел иметь возможность выбрать пароль в сетке, чтобы скопировать его. К сожалению, Radgrid снова запустит команду элемента RowClick, и строка будет отменена. Поэтому я не могу скопировать пароли.
У меня вопрос: есть ли способ отменить команду item радгрида при определенных обстоятельствах? Я хотел бы иметь возможность отключить событие itemcommand, когда пароль уже расшифрован.
Заранее спасибо!
Изменить: Я думаю, я должен также упомянуть, что я использую панель radajaxloading для отображения анимации по сетке при загрузке. Даже когда метод itemcommand ничего не делает, отображается панель загрузки ajax, и текст, который я пытаюсь выделить, отменяется.
Больше правок:
Вот мой код 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
1 ответ
Переключитесь на функцию 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
}
}