sql >> Database teknologi >  >> Database Tools >> SSMS

Netstyring i SSMS

SSMS-gitter er ikke C++, det er ikke en ListView eller et DataGrid, det bruger ikke Windows native kontroller, det er "bare" en brugerdefineret .NET-kontrol ved navn GridControl (i et Microsoft.SqlServer.Management.UI.Grid navneområde), der tilhører en samling ved navn Microsoft.SqlServer.GridControl.dll.

Du kan finde det forskellige steder:i GAC , i %ProgramFiles(x86)%\Common Files\Microsoft Shared\SQL Server Developer Tools , i %ProgramFiles(x86)%\Microsoft SQL Server Management Studio 18\Common7\IDE , i Visual Studio-filer osv.

Det er ikke et omdistribuerbart binært AFAIK, så det er ikke meningen, at du skal sende det, det er ikke dokumenteret, og det er ikke et komplet gitter som andre. Men som du fandt ud af, er den let, og den kan være hurtig, lige så hurtig som din underliggende dataadgang.

Hvis du vil lege med det, er her et lille Winforms C#-eksempel (et 10.000 x 256 gitter, hvilket er 2,5 millioner celler, der åbnes øjeblikkeligt), der viser, hvordan du bruger det:

using System;
using System.Drawing;
using System.Windows.Forms;
using Microsoft.SqlServer.Management.UI.Grid;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        private GridControl _control = new GridControl();

        public Form1()
        {
            InitializeComponent();

            for (int i = 0; i < 256; i++)
            {
                _control.AddColumn(new GridColumnInfo { HeaderType = GridColumnHeaderType.Text, IsUserResizable = true });
                _control.SetHeaderInfo(i, "Column " + i, null);
            }

            _control.Dock = DockStyle.Fill;
            _control.GridStorage = new GridStorage();
            Controls.Add(_control);
        }
    }

    // represents a datasource
    public class GridStorage : IGridStorage
    {
        public long EnsureRowsInBuf(long FirstRowIndex, long LastRowIndex)
        {
            return NumRows(); // pagination, dynamic load, virtualization, could happen here
        }

        public void FillControlWithData(long nRowIndex, int nColIndex, IGridEmbeddedControl control)
        {
            // for cell edition
            control.SetCurSelectionAsString(GetCellDataAsString(nRowIndex, nColIndex));
        }

        public string GetCellDataAsString(long nRowIndex, int nColIndex)
        {
            // get cell data
            return nRowIndex + " x " + nColIndex;
        }

        public int IsCellEditable(long nRowIndex, int nColIndex)
        {
            return 1; // 1 means yes, 0 means false
        }

        public long NumRows()
        {
            return 10000;
        }

        public bool SetCellDataFromControl(long nRowIndex, int nColIndex, IGridEmbeddedControl control)
        {
            // when a cell has changed, you're supposed to change your data here
            return true;
        }

        public Bitmap GetCellDataAsBitmap(long nRowIndex, int nColIndex) => throw new NotImplementedException();
        public void GetCellDataForButton(long nRowIndex, int nColIndex, out ButtonCellState state, out Bitmap image, out string buttonLabel) => throw new NotImplementedException();
        public GridCheckBoxState GetCellDataForCheckBox(long nRowIndex, int nColIndex) => throw new NotImplementedException();
    }
}

Her er, hvordan det ser ud. Du kan rulle uden afmatning på en anstændig computer.




  1. Mærkelig fejl i phpmyadmin, den er installeret med succes, men fungerer stadig ikke

  2. Kan ikke initialisere mbstring med PHP 7

  3. MySQL Multiple Database Setup

  4. PHPMyAdmin siger:Den brugte kommando er ikke tilladt med denne MySQL-version