2017-01-04 16 views
0

Это, вероятно, легко для экспертов среди вас, но я пытаюсь выяснить, как настроить столбцы сетки данных в приложении Windows с помощью C# в Visual Studio 2015 .Автоматическое изменение размера столбцов в сетке данных из SQL с помощью C#

Мой код ниже. Я читал о таких командах, как 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

Возможно, вы захотите удалить все, что связано с SQL, из вашего примера кода, чтобы сделать его кратким. Что касается ваших проблем, неважно, откуда берутся данные. – uncoder

+0

** [Метод DataGridView.AutoResizeColumns] (https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.autoresizecolumns (v = vs.110) .aspx) ** Ввод текста в метод (aka «command»), и нажатие F1 сообщит вам все, что вам нужно знать. – Plutonix

+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 
    } 
} 
+0

Большое спасибо. Ваше первое предложение отлично работало. Приятно видеть, что кто-то помогает проактивно, а не просто мочиться, потому что у меня есть некоторая терминология. –

+0

Не беспокойтесь. См. Мое редактирование для получения дополнительной информации, если вам это нужно. – CodingYoshi