Musisz skorzystać z DataGridViewColumn.AutoSizeMode
nieruchomości.
Możesz użyć jednej z tych wartości dla kolumny 0 i 1:
AllCells: szerokość kolumny dostosowuje się do zawartości wszystkich komórek w kolumnie, w tym do komórki nagłówka.
AllCellsExceptHeader: Szerokość kolumny jest dostosowywana do zawartości wszystkich komórek w kolumnie, z wyjątkiem komórki nagłówka.
DisplayedCells: szerokość kolumny jest dostosowywana w celu dopasowania zawartości wszystkich komórek w kolumnie, które są w wierszach aktualnie wyświetlanych na ekranie, w tym komórki nagłówka.
DisplayedCellsExceptHeader: szerokość kolumny jest dostosowywana do zawartości wszystkich komórek w kolumnie, które są w wierszach aktualnie wyświetlanych na ekranie, z wyjątkiem komórki nagłówka.
Następnie użyj wartości Fill dla kolumny 2
Szerokość kolumny jest dostosowywana w taki sposób, aby szerokości wszystkich kolumn dokładnie wypełniały obszar wyświetlania kontrolki ...
this.DataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
this.DataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
this.DataGridView1.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
Jak zauważyli inni użytkownicy, wartość domyślną można ustawić na datagridview
poziomie DataGridView.AutoSizeColumnsMode
właściwości.
this.DataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
this.DataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
możliwe:
this.DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;
Ważna uwaga:
Jeśli twoja siatka jest powiązana ze źródłem danych, a kolumny są generowane automatycznie ( AutoGenerateColumns
właściwość ustawiona na True), musisz użyć DataBindingComplete
zdarzenia, aby zastosować styl PO utworzeniu kolumn.
W niektórych scenariuszach (na przykład zmiana wartości komórek według kodu) musiałem wywołać, DataGridView1.AutoResizeColumns();
aby odświeżyć siatkę.
To moje ulubione podejście ...
_dataGrid.DataBindingComplete += (o, _) => { var dataGridView = o as DataGridView; if (dataGridView != null) { dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; dataGridView.Columns[dataGridView.ColumnCount-1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; } };
źródło
index out of bound exception
napraw to, dzięki !!Po prostu zmień właściwość z właściwości kontroli:
AutoSizeColumnsMode:Fill
LUB Według kodu
dataGridView1.AutoSizeColumnsMode=DataGridViewAutoSizeColumnsMode.Fill;
źródło
Nie testowane, ale możesz spróbować.Przetestowane i działające. Mam nadzieję, że można bawić sięAutoSizeMode
zDataGridViewColum
aby osiągnąć to, co trzeba.Spróbuj ustawić
dataGridView1.DataSource = yourdatasource;<--set datasource before you set AutoSizeMode //Set the following properties after setting datasource dataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; dataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; dataGridView1.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
To powinno działać
źródło
Spróbuj zrobić,
źródło
public static void Fill(DataGridView dgv2) { try { dgv = dgv2; foreach (DataGridViewColumn GridCol in dgv.Columns) { for (int j = 0; j < GridCol.DataGridView.ColumnCount; j++) { GridCol.DataGridView.Columns[j].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; GridCol.DataGridView.Columns[j].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; GridCol.DataGridView.Columns[j].FillWeight = 1; } } } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
źródło
GridCol
. Po drugie, ustawia AutoSizeMode dla każdej kolumny na dwie różne wartości; drugie przypisanie nadpisze pierwsze.Aby oprzeć się na odpowiedzi AlfredBra, jeśli ukryłeś niektóre kolumny, możesz użyć poniższego, aby automatycznie zmienić rozmiar wszystkich kolumn, a następnie po prostu ostatnia widoczna kolumna wypełni puste miejsce:
źródło
Oto, co zrobiłem, aby kolumna „first_name” wypełniła miejsce, gdy wszystkie kolumny nie mogą tego zrobić.
Kiedy siatka staje się mała, kolumna „first_name” staje się prawie niewidoczna (bardzo cienka), więc mogę ustawić DataGridViewAutoSizeColumnMode na AllCells jako inne widoczne kolumny. W przypadku problemów z wydajnością ważne jest, aby ustawić je na None przed powiązaniem ich danych i ustawić z powrotem na AllCell w module obsługi zdarzeń DataBindingComplete w siatce. Mam nadzieję, że to pomoże!
private void dataGridView1_Resize(object sender, EventArgs e) { int ColumnsWidth = 0; foreach(DataGridViewColumn col in dataGridView1.Columns) { if (col.Visible) ColumnsWidth += col.Width; } if (ColumnsWidth <dataGridView1.Width) { dataGridView1.Columns["first_name"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; } else if (dataGridView1.Columns["first_name"].Width < 10) dataGridView1.Columns["first_name"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; }
źródło
public void setHeight(DataGridView src) { src.Height= src.ColumnHeadersVisible ? src.ColumnHeadersHeight : 0 + src.Rows.OfType<DataGridViewRow>().Where(row => row.Visible).Sum(row => row.Height); }
źródło
Spróbuj tego :
źródło