簡體   English   中英

Telerik RadGridView決明服務器名稱和會話ID

[英]Telerik RadGridView Cassia Server Name and Session ID

我正在使用telerik:RadGridView和telerik:RadContextMenu.ContextMenu在我的應用程序中生成一個右鍵單擊菜單。 我需要能夠從選定的行中獲取服務器名和會話ID,以便傳遞給Disconnect和Logoff函數。 但是,我很難獲取所需的數據。

這是組件的XAML

<telerik:RadGridView  x:Name="UserSessionGrid" IsReadOnly="True" FontWeight="Bold" AutoGeneratingColumn="UserSessionGrid_AutoGeneratingColumn"  CanUserResizeColumns="False" CanUserDeleteRows="False" CanUserResizeRows="False" ClipboardCopyMode="All" Copied="UserSessionGrid_Copied" >
   <telerik:RadContextMenu.ContextMenu>
     <telerik:RadContextMenu Opened="RadContextMenu_Opened" ItemClick="RadContextMenu_ItemClick">
      <telerik:RadContextMenu.Items>
        <telerik:RadMenuItem Header="Copy" />
        <telerik:RadMenuItem Header="Disconnect" />
        <telerik:RadMenuItem Header="Logoff" />
      </telerik:RadContextMenu.Items>
    </telerik:RadContextMenu>
  </telerik:RadContextMenu.ContextMenu>
</telerik:RadGridView>

這是處理右鍵單擊的相關代碼

/// <summary>
/// Handles the ItemClick event of the RadContextMenu control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="Telerik.Windows.RadRoutedEventArgs"/> instance containing the event data.</param>
private void RadContextMenu_ItemClick(object sender, Telerik.Windows.RadRoutedEventArgs e)
{
  RadContextMenu menu = (RadContextMenu)sender;
  RadMenuItem clickedItem = e.OriginalSource as RadMenuItem;
  GridViewRow row = menu.GetClickedElement<GridViewRow>();
  GridViewCell cell = menu.GetClickedElement<GridViewCell>();
  GridViewRowItem rowitem = menu.GetClickedElement<GridViewRowItem>();
  if (clickedItem != null && row != null)
  {
    string header = Convert.ToString(clickedItem.Header);

     switch (header)
     {
       case "Copy":
         Clipboard.SetText(cell.Value.ToString());
         break;
       case "Disconnect":
         // Grab Server Name Column and Session ID Column Data
         break;
       case "Logoff":
         // Grab Server Name Column and Session ID Column Data
         break;
       default:
         break;
    }
  }
}
/// <summary>
/// Handles the Opened event of the RadContextMenu control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="RoutedEventArgs"/> instance containing the event data.</param>
private void RadContextMenu_Opened(object sender, RoutedEventArgs e)
{
  RadContextMenu menu = (RadContextMenu)sender;
  GridViewRow row = menu.GetClickedElement<GridViewRow>();

  if (row != null)
  {
    row.IsSelected = row.IsCurrent = true;
    GridViewCell cell = menu.GetClickedElement<GridViewCell>();
    if (cell != null)
    {
      cell.IsCurrent = true;
    }
  }
  else
  {
    menu.IsOpen = false;
  }
}

這是我的課程

class Session
{
    public String Server { get; set; }
    public String Domain { get; set; }
    public String User { get; set; }
    public int sID { get; set; }
    public ConnectionState State { get; set; }
    public IPAddress IP { get; set; }
    public String Workstation { get; set; }
    public DateTime? Connect { get; set; }
    public DateTime? Login { get; set; }
    public TimeSpan Idle { get; set; }
    /// <summary>
    /// Initializes a new instance of the <see cref="Session"/> class.
    /// </summary>
    /// <param name="server">The server.</param>
    /// <param name="domain">The domain.</param>
    /// <param name="user">The user.</param>
    /// <param name="session">The session.</param>
    /// <param name="state">The state.</param>
    /// <param name="ip">The ip.</param>
    /// <param name="workstation">The workstation.</param>
    /// <param name="connect">The connect.</param>
    /// <param name="login">The login.</param>
    /// <param name="idle">The idle.</param>
    public Session (string server, string domain, string user, int session, ConnectionState state, IPAddress ip, string workstation, DateTime? connect, DateTime? login, TimeSpan idle)
    {
        this.Server = server.ToUpper();
        this.Domain = domain.ToUpper();
        this.User = user;
        this.sID = session;
        this.State = state;
        this.IP = ip;
        this.Workstation = workstation.ToUpper();
        this.Connect = connect;
        this.Login = login;
        this.Idle = idle;
    }
}

使用以下代碼調用

 /// <summary>
 /// Handles the DoWork event of the worker control.
 /// </summary>
 /// <param name="sender">The source of the event.</param>
 /// <param name="e">The <see cref="DoWorkEventArgs"/> instance containing the event data.</param>
 private void worker_DoWork(object sender, DoWorkEventArgs e)
 {
   App.Current.Dispatcher.Invoke((Action)delegate
   {
     UserSessionGrid.IsBusy = true;
   });
   ITerminalServicesManager manager = new TerminalServicesManager();
   foreach (var ServerName in ServerList)
   {
     using (ITerminalServer server = manager.GetRemoteServer(ServerName))
     {
     try
     {
       server.Open();
       foreach (ITerminalServicesSession session in server.GetSessions())
       {
         items.Add(new Session(server.ServerName, session.DomainName, session.UserName, session.SessionId, session.ConnectionState, session.ClientIPAddress, session.WindowStationName, session.ConnectTime,session.LoginTime, session.IdleTime));
         //worker.ReportProgress(session.SessionId);
       }
       server.Close();

     }
     catch (Win32Exception) { }
     catch (SystemException) { }
     catch (Exception) { }
     }
   }
 }

我通過執行以下操作找到了解決方案

RadWindow.Alert((((Session)UserSessionGrid.SelectedItem).Server); RadWindow.Alert((((Session)UserSessionGrid.SelectedItem).SessionID);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM