Kisi SSMS bukan C++, bukan ListView atau DataGrid, tidak menggunakan kontrol asli Windows, ini "hanya" kontrol .NET khusus bernama GridControl
(dalam Microsoft.SqlServer.Management.UI.Grid
namespace) yang dimiliki rakitan bernama Microsoft.SqlServer.GridControl.dll.
Anda dapat menemukannya di berbagai tempat:di GAC , di %ProgramFiles(x86)%\Common Files\Microsoft Shared\SQL Server Developer Tools
, di %ProgramFiles(x86)%\Microsoft SQL Server Management Studio 18\Common7\IDE
, dalam file Visual Studio, dll.
Ini bukan AFAIK biner yang dapat didistribusikan ulang, jadi Anda tidak boleh mengirimkannya, itu tidak didokumentasikan, dan itu bukan kisi berfitur lengkap seperti yang lain. Namun, seperti yang Anda ketahui, ini ringan dan bisa secepat akses data dasar Anda.
Jika Anda ingin memainkannya, inilah contoh kecil Winforms C# (kotak 10.000 x 256, yaitu 2,5 juta sel yang terbuka secara instan) yang menunjukkan cara menggunakannya:
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();
}
}
Berikut tampilannya. Anda dapat menggulir tanpa pelambatan apa pun, di komputer yang layak.