1

下に示すようなtelerikradgridがあります

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

行の1つをクリックすると、次のように、クリックした行のパスワードが表示されます。

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

それはうまくいきます。パスワードの復号化はかなり複雑で長いプロセスであるため、この方法で進めています。そのため、特にユーザーがすべてのパスワードを必要としない場合は、一度に1つのパスワードを復号化する方が時間がかかりません。

パスワードを表示したら、グリッドでパスワードを選択してコピーできるようにしたいと思います。残念ながら、radgridは「RowClick」itemコマンドをもう一度起動し、行の選択が解除されます。そのため、パスワードをコピーできません。

私の質問は:特定の状況下で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
4

1 に答える 1

2

radGridのOnSelectedIndexChanged関数に切り替えて、現在選択されている行をクライアント側変数に格納し、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 
        }
    }
于 2012-03-23T15:02:40.323 に答える