Вы можете просто использовать SqlDataSource. Вы перемещаете SqlDataSource из панели инструментов, где говорится Data, SqlDataSource. Затем вы сконфигурировали источник данных с помощью смарт-тега. Затем, используя смарт-тег в gridview, выберите SqlDataSource, который вы разместили на странице aspx. Это очень быстро и требует мало кодирования. http://msdn.microsoft.com/En-us/Library/z72eefad.aspx это покажет вам немного больше. Надеюсь, это поможет вам!
Я не уверен в том, под чем Вы подразумеваете "глобальный" здесь, но здесь это идет (я предполагаю, что Вы подразумеваете, что команда на прикладном уровне, например, Сохраняет Весь , который может быть инициирован отовсюду Ctrl + Сдвиг + S .)
Вы находите глобальное UIElement
по Вашему выбору, например, высокоуровневое окно, которое является родителем всех средств управления, где Вам нужна эта привязка. Из-за "пузырения" событий WPF, события в дочерних элементах будут пузыриться полностью до корня дерева управления.
Теперь, сначала Вам нужно
InputBinding
как это SaveAll
) через CommandBinding
. Для Windows Ключ, Вы используете право Ключ перечисленный участник, Key.LWin
или Key.RWin
public WindowMain()
{
InitializeComponent();
// Bind Key
InputBinding ib = new InputBinding(
MyAppCommands.SaveAll,
new KeyGesture(Key.S, ModifierKeys.Shift | ModifierKeys.Control));
this.InputBindings.Add(ib);
// Bind handler
CommandBinding cb = new CommandBinding( MyAppCommands.SaveAll);
cb.Executed += new ExecutedRoutedEventHandler( HandlerThatSavesEverthing );
this.CommandBindings.Add (cb );
}
private void HandlerThatSavesEverthing (object obSender, ExecutedRoutedEventArgs e)
{
// Do the Save All thing here.
}
Я не уверен в WPF, но это может помочь. Я использовал решение, описанное в RegisterHotKey (user32) (измененный к моим потребностям, конечно) для приложения Windows Forms C# для присвоения комбинации КЛАВИШИ CTRL в рамках Windows для перевода в рабочее состояние формы C#, и это работало красиво (даже на Windows Vista). Я надеюсь, что это помогает и удачи!
RegisterHotKey()
предложенный John мог работать - единственная выгода - то, что это требует HWND (использующий PresentationSource.FromVisual()
и бросающий результат к HwndSource).
Однако необходимо будет также ответить эти WM_HOTKEY
сообщение - я не уверен, существует ли способ получить доступ к WndProc окна WPF или не (который может быть сделан для окон Windows Forms).
Коллега записал образец о том, как создать захват клавиатуры низкого уровня, который будет использоваться с WPF.
http://blogs.vertigo.com/personal/ralph/Blog/Lists/Posts/Post.aspx?ID=8
Если вы собираетесь смешивать Win32 и WPF, вот как я это сделал:
using System;
using System.Runtime.InteropServices;
using System.Windows.Interop;
using System.Windows.Media;
using System.Threading;
using System.Windows;
using System.Windows.Input;
namespace GlobalKeyboardHook
{
public class KeyboardHandler : IDisposable
{
public const int WM_HOTKEY = 0x0312;
public const int VIRTUALKEYCODE_FOR_CAPS_LOCK = 0x14;
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vlc);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool UnregisterHotKey(IntPtr hWnd, int id);
private readonly Window _mainWindow;
WindowInteropHelper _host;
public KeyboardHandler(Window mainWindow)
{
_mainWindow = mainWindow;
_host = new WindowInteropHelper(_mainWindow);
SetupHotKey(_host.Handle);
ComponentDispatcher.ThreadPreprocessMessage += ComponentDispatcher_ThreadPreprocessMessage;
}
void ComponentDispatcher_ThreadPreprocessMessage(ref MSG msg, ref bool handled)
{
if (msg.message == WM_HOTKEY)
{
//Handle hot key kere
}
}
private void SetupHotKey(IntPtr handle)
{
RegisterHotKey(handle, GetType().GetHashCode(), 0, VIRTUALKEYCODE_FOR_CAPS_LOCK);
}
public void Dispose()
{
UnregisterHotKey(_host.Handle, GetType().GetHashCode());
}
}
}
Вы можете получить код виртуальной клавиши для горячей клавиши, которую вы хотите зарегистрировать здесь: http://msdn.microsoft.com/en-us/library/ms927178.aspx
Может быть, есть способ получше, но это то, что у меня пока есть.
Твое здоровье!
Хотя RegisterHotKey иногда именно то, что вам нужно, в большинстве случаев вы, вероятно, не захотите использовать общесистемные горячие клавиши. В итоге я использовал следующий код:
using System.Windows; using System.Windows.Interop; namespace WpfApp { public partial class MainWindow : Window { const int WM_KEYUP = 0x0101; const int VK_RETURN = 0x0D; const int VK_LEFT = 0x25; public MainWindow() { this.InitializeComponent(); ComponentDispatcher.ThreadPreprocessMessage += ComponentDispatcher_ThreadPreprocessMessage; } void ComponentDispatcher_ThreadPreprocessMessage( ref MSG msg, ref bool handled) { if (msg.message == WM_KEYUP) { if ((int)msg.wParam == VK_RETURN) MessageBox.Show("RETURN was pressed"); if ((int)msg.wParam == VK_LEFT) MessageBox.Show("LEFT was pressed"); } } } }