使用C#从SQL自动调整数据网格中列的大小

时间:2017-01-04 23:16:44

标签: c# datagridview autoresize column-width

对于您这里的专家来说这可能很容易,但我试图找出如何在Visual Studio 2015中使用C#在Windows应用程序中调整数据网格的列。

我的代码如下。我已经阅读过像AutoResize这样的命令,但我无法弄清楚如何以及将它放在我的代码中。我尝试的所有内容都会出现语法错误,或者没有调整大小的选项:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication5
{
    public partial class Main : Form
{

    int BugID = 0;

    public Main()
    {
        InitializeComponent();
    }

    private void txtUser_TextChanged(object sender, EventArgs e)
    {
    }



            Reset();
            FillDataGridView();

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "There is an error. Please review");
        }
        finally
        {
            sqlCon.Close(); // close the connection
        }
    }
    void FillDataGridView() // The below is to display the search results in the Data Grid View box using the stored procedure for search results
    {
        if (sqlCon.State == ConnectionState.Closed)
            sqlCon.Open();
        SqlDataAdapter sqlDa = new SqlDataAdapter("BugViewOrSearch", sqlCon);
        sqlDa.SelectCommand.CommandType = CommandType.StoredProcedure;
        sqlDa.SelectCommand.Parameters.AddWithValue("@BugIssue", txtSearch.Text.Trim());
        DataTable dtbl = new DataTable();
        sqlDa.Fill(dtbl);
        dgvIssues.DataSource = dtbl;
        sqlCon.Close();
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {

    }

    private void btnSearch_Click(object sender, EventArgs e)
    {
        try
        {
            FillDataGridView();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "There is an error. Please review");
        }
    }

    private void dgvIssues_DoubleClick(object sender, EventArgs e)
    {
        if(dgvIssues.CurrentRow.Index != -1) // For updating an issue when double clicking on a row/issue
        {
            BugID = Convert.ToInt32(dgvIssues.CurrentRow.Cells[0].Value.ToString());
            txtUser.Text = dgvIssues.CurrentRow.Cells[1].Value.ToString();
            txtSubject.Text = dgvIssues.CurrentRow.Cells[2].Value.ToString();
            txtDescription.Text = dgvIssues.CurrentRow.Cells[3].Value.ToString();
            btnCreate.Text = "Update Issue"; // Changes the button from 'Create Issue' to 'Update Issue'
            btnDelete.Enabled = true;
        }
    }

    void Reset() // To reset all field of the form
    {
        txtUser.Text = txtSubject.Text = txtDescription.Text = "";
        btnCreate.Text = "Create Issue";
        BugID = 0;
        btnDelete.Enabled = false;
    }

    private void btnRefresh_Click(object sender, EventArgs e)
    {
        Reset(); // Calls the reset function above
    }

    private void Main_Load(object sender, EventArgs e)
    {
        Reset();
        FillDataGridView();
        // To show all bugs/issues in the database
    }


}
}

我需要列适合文本或至少填充灰色空间。

任何提示都会有用。

谢谢

1 个答案:

答案 0 :(得分:1)

你可以这样做。这将使列足够宽,以便内容适合它们:

void FillDataGridView() // The below is to display the search results in the Data Grid View box using the stored procedure for search results
{
   // Your code here

   // This is after your code   
   dgvIssues.AutoResizeColumns();
}

您还可以将参数传递给AutoResizeColumns。它接受的参数是DataGridViewAutoSizeColumnsMode类型的枚举。这样可以更好地控制自动调整大小。以下是如何做到这一点:

// This is the default so same as dgvIssues.AutoResizeColumns();
dgvIssues.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);

以下是您对参数的不同选项:

      //
      // Summary:
      //     The column widths do not automatically adjust.
      None = 1,
      //
      // Summary:
      //     The column widths adjust to fit the contents of the column header cells.
      ColumnHeader = 2,
      //
      // Summary:
      //     The column widths adjust to fit the contents of all cells in the columns, excluding
      //     header cells.
      AllCellsExceptHeader = 4,
      //
      // Summary:
      //     The column widths adjust to fit the contents of all cells in the columns, including
      //     header cells.
      AllCells = 6,
      //
      // Summary:
      //     The column widths adjust to fit the contents of all cells in the columns that
      //     are in rows currently displayed onscreen, excluding header cells.
      DisplayedCellsExceptHeader = 8,
      //
      // Summary:
      //     The column widths adjust to fit the contents of all cells in the columns that
      //     are in rows currently displayed onscreen, including header cells.
      DisplayedCells = 10,
      //
      // Summary:
      //     The column widths adjust so that the widths of all columns exactly fill the display
      //     area of the control, requiring horizontal scrolling only to keep column widths
      //     above the System.Windows.Forms.DataGridViewColumn.MinimumWidth property values.
      //     Relative column widths are determined by the relative System.Windows.Forms.DataGridViewColumn.FillWeight
      //     property values.
      Fill = 16

这是另一种方法,您可以具体告诉它每列的宽度:

void FillDataGridView() // The below is to display the search results in the Data Grid View box using the stored procedure for search results
{
   // Your code here

   // This is after your code   
   // For individual columns, do it like this:
   foreach( var column in dgvIssues.Columns) {
         column.Width = 100; // Or whatever you like 
   }
}