W użytkowaniu każdej aplikacji nadejdzie taka chwila, kiedy będziemy potrzebowali funkcji, której producent nie przewidział lub wykonał wbrew naszym oczekiwaniom.
Co możemy zrobić w takim przypadku:
- Zamówić rozszerzenie u producenta (nie zawsze będzie to możliwe).
- Zmienić program - rozwiązanie kosztowne i dodatkowo czasochłonne dla migracji danych.
- Posłużyć się doraźnie aplikacją typu Access. Rozszerzenia będą poza naszym programem z pełnymi tego konsekwencjami.
Zaawansowanym użytkownikom proponujemy skorzystanie z Sz@rk API/Designer, wbudowanego bezpłatnego narzędzia, które umożliwia dodawanie nowych funkcji do aplikacji z wykorzystaniem całej biblioteki narzędziowej oraz naszych wewnętrznych klas systemu Sz@rk. Oczywiście wszystko dostępne jest tylko wprost z naszej aplikacji, używanie jakiejkolwiek biblioteki poza naszym systemem jest niedozwolone!
Nie można używać bibliotek w innych systemach w tym bezpośrednio w Visual Studio.
W przykładzie utworzymy nowe okno, w pełni funkcjonalne i zgodne z resztą aplikacji. Będzie to tabela kontrahenci z bazy cdn_demo systemu CDN OPTIMA. Dodatkowo tabelę możemy edytować za pomocą okna dialogowego. Dozwolone są operacje dodawania, edytowania i kasowania rekordów.
W przykładzie zastosowano klasę MsSql, którą łatwo można zamienić na klasę MySql i obsłużyć własną bazę danych opartą na serwerze MySQL, np. własnego sklepu internetowego.
Dodane przez użytkownika okno posiada wszystkie standardowe opcje jak: drukowanie, eksport do XLS, PDF, filtrowanie, grupowanie i sortowanie danych, drukowanie wg własnych projektów FR, itp.
Okno dialogowe do edycji danych bieżącego rekordu.
Pełny kod C#.
namespace Szark
{
using System;
using System.Drawing;
using System.Windows.Forms;
using TGSoft.Data;
using TGSoft.DB;
using TGSoft.UI;
using TGSoft.Utils;
public partial class Form1 : DevExpress.XtraEditors.XtraForm
{
private MsSql sql;
private DADataTable dt;
public Form1(object sender)
{
this.InitializeComponent();
Icon = Conversions.BmpToIcon(TGSoft.Repository.Properties.Resources.mailicons_contacts_16);
}
public void Main()
{
sql = new MsSql("localhost", "cdn_demo", "", "");
sql.SetArithAbortOn = true;
dt = new DADataTable(sql, "SELECT * FROM CDN.Kontrahenci", "", null);
dt.AutoUpdateOnPost = true;
dt.TableName = "CDN.Kontrahenci";
dt.PrimaryKey = "Knt_KntId";
dt.BeforePost += dt_BeforePost;
dt.Open();
var grid = new GridControl(this, dt);
grid.CreateAllColumns();
grid.Controller.AddEditButtons(true, true, true);
grid.Controller.BeforeShowEditDialog += gc_BeforeShowEditDialog;
grid.Controller.BeforeShowAppendDialog += gc_BeforeShowAppendDialog;
ShowDialog();
}
private void dt_BeforePost(object sender, DADataTableEventArgs e)
{
sql.SetNullValues(e.Row);
}
private void gc_BeforeShowEditDialog(object sender, EventArgs e)
{
dt.Edit();
ShowEditDialog();
}
private void gc_BeforeShowAppendDialog(object sender, EventArgs e)
{
dt.Append();
ShowEditDialog();
}
private void ShowEditDialog()
{
using (var dlg = new GridEditForm(dt, 500, 350))
{
dlg.AddTextEdit("ID", "Knt_KntId", true, false, 100);
dlg.AddTextEdit("Kod", "Knt_Kod", true, true, 200);
dlg.AddTextEdit("Nazwa 1", "Knt_Nazwa1", true, true);
dlg.AddTextEdit("Nazwa 2", "Knt_Nazwa2", true, true);
dlg.AddTextEdit("Ulica", "Knt_Ulica", true, true);
dlg.AddTextEdit("Miasto", "Knt_Miasto", true, true);
dlg.ShowDialog();
}
}
}
}