SSMS
 sql >> Cơ Sở Dữ Liệu >  >> Database Tools >> SSMS

Kiểm soát lưới trong SSMS

Lưới SSMS không phải là C ++, không phải là ListView cũng không phải DataGrid, nó không sử dụng các điều khiển gốc của Windows, nó "chỉ" là một điều khiển .NET tùy chỉnh có tên GridControl (trong Microsoft.SqlServer.Management.UI.Grid không gian tên) thuộc về một tập hợp có tên Microsoft.SqlServer.GridControl.dll.

Bạn có thể tìm thấy nó ở nhiều nơi khác nhau:trong GAC , trong %ProgramFiles(x86)%\Common Files\Microsoft Shared\SQL Server Developer Tools , trong %ProgramFiles(x86)%\Microsoft SQL Server Management Studio 18\Common7\IDE , trong tệp Visual Studio, v.v.

Nó không phải là một AFAIK nhị phân có thể phân phối lại, vì vậy bạn không phải vận chuyển nó, nó không được ghi lại và không phải là một lưới đầy đủ tính năng như những người khác. Tuy nhiên, như bạn đã tìm hiểu, nó nhẹ và có thể nhanh, nhanh như quyền truy cập dữ liệu cơ bản của bạn.

Nếu bạn muốn chơi với nó, đây là một mẫu Winforms C # nhỏ (lưới 10000 x 256, có 2,5 triệu ô mở ra ngay lập tức) minh họa cách sử dụng nó:

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

Đây là những gì nó trông như thế này. Bạn có thể cuộn mà không bị chậm trên một máy tính tốt.




  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. Tên đối tượng không hợp lệ - Thủ tục được lưu trữ

  2. Làm cách nào để đặt giá trị cột thành NULL trong SQL Server Management Studio?

  3. Lỗi SQL Server 2012:tham chiếu đối tượng không được đặt thành phiên bản của đối tượng

  4. Tại sao SSMS lại thay đổi các thủ tục đã lưu trữ của tôi (định dạng lại, thay đổi thực thi thành EXECUTE, v.v.)

  5. Làm cách nào để đặt thuộc tính Allow Nulls trong trình thiết kế bảng của SSMS thành luôn sai?