Snippets datagridview

Handle grid (dgvhandle.snippet)

<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets  xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    <CodeSnippet Format="1.0.0">
        <Header>
            <Title>Handle datagridview</Title>
            <Shortcut>dgvHandle</Shortcut>
            <Description>Code snippet for handling a datagridview with insert/update/delete</Description>
            <Author>Peter De Keyser</Author>
            <SnippetTypes>
                <SnippetType>Expansion</SnippetType>
            </SnippetTypes>
        </Header>
        <Snippet>
            <Declarations>
                <Literal>
                    <ID>object</ID>
                    <ToolTip>Name object</ToolTip>
                    <Default>Object</Default>
                </Literal>
            </Declarations>
            <Code Language="csharp">
                <![CDATA[
    $object$ selected$object$ = new $object$();

    //todo: set dgv SelectionMode = FullRowSelect
    //todo: set dgv RowHeadersVisible = false
    //todo: set dgv RowTemplate.Height = 18-20  (Standard is 22)
    //todo: load bindingsource: bs$object$Grid.DataSource = new SortableList<$object$>($object$.GetAll());

    #region $object$ Controls

    private void dgv$object$_SelectionChanged(object sender, EventArgs e)
    {
      // value from multiple select:
      //foreach (DataGridViewRow mRow in dgv$object$.SelectedRows)
      //{
      //  $object$ m$object$ = ($object$)mRow.DataBoundItem;
      //}

      // value from normal select:
      //$object$ m$object$ = ($object$)dgv$object$.CurrentRow.DataBoundItem;

      // set details / subgrid
      if (bs$object$Grid.Current != null)
      {
        $object$.CopyMembers(($object$)bs$object$Grid.Current, selected$object$);
        bs$object$Detail.DataSource = bs$object$Grid.Current;
      }
      else
      {
        selected$object$ = new $object$();
        bs$object$Detail.DataSource = new $object$();
      }
    }

    private void btn$object$New_Click(object sender, EventArgs e)
    {
      if (btn$object$New.Text == "New")
      {
        $object$New();
        btn$object$New.Text = "Insert";
      }
      else if (btn$object$New.Text == "Insert")
      {
        if ($object$Insert())
          Reset$object$Controls();
        else
          epError.SetError(btn$object$New, "Error inserting $object$");
      }
    }

    private void btn$object$Edit_Click(object sender, EventArgs e)
    {
      if (btn$object$Edit.Text == "Edit")
      {
        $object$Edit();
        btn$object$Edit.Text = "Update";
      }
      else if (btn$object$Edit.Text == "Update")
      {
        if ($object$Update())
          Reset$object$Controls();
        else
          epError.SetError(btn$object$Edit, "Error updating $object$");
      }
    }

    private void btn$object$Delete_Click(object sender, EventArgs e)
    {
      if (btn$object$Delete.Text == "Delete")
      {
        $object$Delete();
        btn$object$Delete.Text = "Confirm";
      }
      else if (btn$object$Delete.Text == "Confirm")
      {
        if ($object$DeleteConfirm())
          Reset$object$Controls();
        else
          epError.SetError(btn$object$Delete, "Error deleting $object$");
      }
    }

    private void btn$object$Cancel_Click(object sender, EventArgs e)
    {
      Reset$object$Controls();
      // Copy the members of the selected item back to the grids and reset them.
      $object$.CopyMembers(selected$object$, ($object$)bs$object$Grid.Current);
      bs$object$Grid.ResetCurrentItem();
      bs$object$Detail.DataSource = bs$object$Grid.Current;
      bs$object$Detail.ResetCurrentItem();
    }

    private void $object$ControlsReadOnly(bool readOnly)
    {
      //todo: add all the controls here
      btn$object$Cancel.Enabled = !readOnly;
      //txtName.ReadOnly = readOnly;
    }

    /// <summary>
    /// Reset the controls after insert/update/delete/cancel. 
    /// Grids are not reset, because this depends on the action before.
    /// </summary>
    private void Reset$object$Controls()
    {
      btn$object$New.Text = "New";
      btn$object$New.Enabled = true;
      btn$object$Edit.Text = "Edit";
      btn$object$Edit.Enabled = true;
      btn$object$Delete.Text = "Delete";
      btn$object$Delete.Enabled = true;
      epError.Clear();
      $object$ControlsReadOnly(true);
      dgv$object$.Enabled = true;
    }

    #endregion

    #region $object$ I/U

    private void $object$New()
    {
      $object$ControlsReadOnly(false);
      dgv$object$.Enabled = false;
      btn$object$Edit.Enabled = false;
      btn$object$Delete.Enabled = false;
      bs$object$Detail.DataSource = new Rbm();
    }

    private bool $object$Insert()
    {
      $object$ inserted = ($object$)bs$object$Detail.Current;
      if ($object$.Insert(ref inserted))
      {
        bs$object$Grid.Add(inserted);
        bs$object$Grid.MoveLast();
        return true;
      }
      else
        return false;
    }

    private void $object$Edit()
    {
      $object$ControlsReadOnly(false);
      dgv$object$.Enabled = false;
      btn$object$New.Enabled = false;
      btn$object$Delete.Enabled = false;
    }

    private bool $object$Update()
    {
      $object$ updated = ($object$)bs$object$Detail.Current;
      if ($object$.Update(ref updated))
      {
        $object$.CopyMembers(updated, ($object$)bs$object$Grid.Current);
        return true;
      }
      else
        return false;
    }

    private void $object$Delete()
    {
      dgv$object$.Enabled = false;
      btn$object$New.Enabled = false;
      btn$object$Edit.Enabled = false;
      btn$object$Cancel.Enabled = true;
    }

    private bool $object$DeleteConfirm()
    {
      if ($object$.Delete(($object$)bs$object$Grid.Current))
      {
        bs$object$Grid.RemoveCurrent();
        bs$object$Grid.MoveFirst();
        return true;
      }
      else
        return false;
    }

    #endregion
$end$]]>
            </Code>
        </Snippet>
    </CodeSnippet>
</CodeSnippets>

[[/code]]
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License