вторник, 12 января 2010 г.

Заполнение параметров значениями для SQL-выражения

Понадобилось протестировать созданное динамически SQL-выражение с параметрами, типа

Select * From Person
Where ID = @param

Чтобы выполнить такой запрос в окне запросов SQL Server Management Studio, необходимо объявить переменные-параметры и заполнить их значениями. Делается это так:

Declare @param uniqueidentifier
Set @param = '5792c959-33b4-47eb-a824-b74d32295506'

Также удалось использовать параметры следующих типов:

Строка:
DECLARE @param nvarchar(255)
SET @param = 'Dr%'

Целое число:
DECLARE @param int
SET @param = 123

Дата-время:
Declare @param DateTime
Set @param = '01/12/2010 14:02:17'

Управление узлами в TreeView (WinForms)

В данной статье представленны исходные коды для следующих операций управления узлами (TreeNode) в элементе управления TreeView:
1) Переместить узел вверх
2) Переместить узел вниз
3) Переместить узел в список родительских узлов
4) Переместить узел в список узлов вышестоящего узла

Речь идет о языке программирования C# и WinForms.

Вот интрефейс программы:




Обработчик кнопки для заполнения TreeView тестовыми элементами TreeNode (нижняя в правом углу):
int i = 0;
private void newNodeButton_Click(object sender, EventArgs e)
{
  // create node
  TreeNode newNode = new TreeNode(String.Format("Node {0}", i++));
  
  // add node in tree view
  if (treeView.SelectedNode != null)
    treeView.SelectedNode.Nodes.Add(newNode);
  else
    treeView.Nodes.Add(newNode);

}


* This source code was highlighted with Source Code Highlighter.

Вот код для определенных операций:

1) Узел вверх:
private void upButton_Click(object sender, EventArgs e)
{
  if (treeView.SelectedNode != null
    && treeView.SelectedNode.PrevNode != null)
  {
    // define edit collection
    TreeNodeCollection editNodes;
    if (treeView.SelectedNode.Parent != null)
      editNodes = treeView.SelectedNode.Parent.Nodes;
    else
      editNodes = treeView.Nodes;

    // define indexes
    int indexSelectedNode = treeView.SelectedNode.Index;
    int indexPreviousNode = treeView.SelectedNode.PrevNode.Index;

    // store node
    TreeNode selectedNode = treeView.SelectedNode;

    // swap
    editNodes.RemoveAt(indexSelectedNode);
    editNodes.Insert(indexPreviousNode, selectedNode);

    // select node
    treeView.SelectedNode = selectedNode;
  }
}


* This source code was highlighted with Source Code Highlighter.

2) Узел вниз:
private void downButton_Click(object sender, EventArgs e)
{
  if (treeView.SelectedNode != null
    && treeView.SelectedNode.NextNode != null)
  {
    // define edit collection
    TreeNodeCollection editNodes;
    if (treeView.SelectedNode.Parent != null)
      editNodes = treeView.SelectedNode.Parent.Nodes;
    else
      editNodes = treeView.Nodes;

    // define indexes
    int indexSelectedNode = treeView.SelectedNode.Index;
    int indexNextNode = treeView.SelectedNode.NextNode.Index;

    // store node
    TreeNode selectedNode = treeView.SelectedNode;

    // swap
    editNodes.RemoveAt(indexSelectedNode);
    editNodes.Insert(indexNextNode, selectedNode);

    // select node
    treeView.SelectedNode = selectedNode;
  }
}


* This source code was highlighted with Source Code Highlighter.

3) Узел влево:
private void leftButton_Click(object sender, EventArgs e)
{
  if (treeView.SelectedNode != null
    && treeView.SelectedNode.Parent != null)
  {

    // define edit collection
    TreeNodeCollection editNodes;
    if (treeView.SelectedNode.Parent.Parent != null)
      editNodes = treeView.SelectedNode.Parent.Parent.Nodes;
    else
      editNodes = treeView.Nodes;

    // store node
    TreeNode selectedNode = treeView.SelectedNode;

    // define indexes
    int indexSelectedNode = treeView.SelectedNode.Index;
    int indexParentNode = treeView.SelectedNode.Parent.Index;

    // move node
    treeView.SelectedNode.Parent.Nodes.Remove(selectedNode);
    editNodes.Insert(indexParentNode + 1, selectedNode);

    // select node
    treeView.SelectedNode = selectedNode;
  }
}


* This source code was highlighted with Source Code Highlighter.

4) Узел вправо:
private void rightButton_Click(object sender, EventArgs e)
{
  if (treeView.SelectedNode != null
    && treeView.SelectedNode.PrevNode != null)
  {

    // define edit collection
    TreeNodeCollection editNodes;
    if (treeView.SelectedNode.Parent != null)
      editNodes = treeView.SelectedNode.Parent.Nodes;
    else
      editNodes = treeView.Nodes;

    // store node
    TreeNode selectedNode = treeView.SelectedNode;
    TreeNode previousNode = selectedNode.PrevNode;

    // move node
    editNodes.Remove(selectedNode);
    previousNode.Nodes.Add(selectedNode);

    // select node
    treeView.SelectedNode = selectedNode;
  }
}


* This source code was highlighted with Source Code Highlighter.

Интрефейс пользователя подсказывает, какие операции доступны для выбранного элемента. Об этом заботится следующая функция:
private void updateEnablingButtons()
{
  upButton.Enabled = (treeView.SelectedNode != null
    && treeView.SelectedNode.PrevNode != null);

  downButton.Enabled = (treeView.SelectedNode != null
    && treeView.SelectedNode.NextNode != null);

  leftButton.Enabled = (treeView.SelectedNode != null
    && treeView.SelectedNode.Parent != null);

  rightButton.Enabled = (treeView.SelectedNode != null
    && treeView.SelectedNode.PrevNode != null);
}


* This source code was highlighted with Source Code Highlighter.

Ее вызываю в момент создания формы и по событию AfterSelect элемента управления TreeView

воскресенье, 3 января 2010 г.

Regex. Поиск слова между кавычками

Дана строка:
что-то здесь Ключ1="Значение" Ключ2="Другое значение" здесь еще кой-чего.

Найти значение первого ключа без кавычек:
^.*Ключ1="(?<1>([.]|[^"])*)".*$

Результат:
Значение