2014-11-24 26 views
0

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

這裏是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) { } 
    } 
    } 
} 

回答

0

我發現解決這個通過執行以下操作

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