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

Netbeheer in SSMS

SSMS-raster is geen C++, het is geen ListView of een DataGrid, het gebruikt geen native Windows-besturingselementen, het is "gewoon" een aangepast .NET-besturingselement met de naam GridControl (in een Microsoft.SqlServer.Management.UI.Grid namespace) die behoort tot een assembly met de naam Microsoft.SqlServer.GridControl.dll.

Je kunt het op verschillende plaatsen vinden:in de GAC , in %ProgramFiles(x86)%\Common Files\Microsoft Shared\SQL Server Developer Tools , in %ProgramFiles(x86)%\Microsoft SQL Server Management Studio 18\Common7\IDE , in Visual Studio-bestanden, enz.

Het is geen herdistribueerbare binaire AFAIK, dus het is niet de bedoeling dat je het verzendt, het is niet gedocumenteerd en het is geen volledig uitgerust raster zoals andere. Maar zoals je hebt ontdekt, is het lichtgewicht en het kan snel zijn, net zo snel als je onderliggende gegevenstoegang.

Als je ermee wilt spelen, is hier een klein Winforms C#-voorbeeld (een raster van 10000 x 256, oftewel 2,5 miljoen cellen dat onmiddellijk wordt geopend) dat laat zien hoe je het moet gebruiken:

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();
    }
}

Hier is hoe het eruit ziet. U kunt scrollen zonder enige vertraging, op een degelijke computer.




  1. Hoe de waarden van een tabelvariabele te zien tijdens het debuggen in T-SQL?

  2. phpMyAdmin installeren op Amazon EC2-instantie

  3. Waarom laat MySQL me het kenmerk niet verwijderen bij update CURRENT_TIMESTAMP?

  4. phpMyAdmin - Wat betekent een tilde (~) in de rijenkolom?