Ho un modulo e un DataGridView. Popolo DataGridView in fase di esecuzione, quindi desidero sapere come ridimensionare il modulo in modo dinamico in base alle dimensioni di DataGridView? Esiste qualche tipo di proprietà o metodo? O devo determinare io stesso le dimensioni e aggiornare di conseguenza?C# Ridimensionamento automatico del modulo sulla dimensione di DataGridView
risposta
Normalmente i controlli adattano le loro dimensioni alle dimensioni del modulo contenente. Per adattare la dimensione del tuo form alle dimensioni di DataGridView, devi fare per determinare la dimensione e quindi impostare le dimensioni del modulo in modo che corrispondano, ricordando di prendere in considerazione le dimensioni extra richieste dalla striscia del menu del modulo e/o barre degli strumenti, barre di stato o altri controlli.
Nel tuo caso, sarebbe probabilmente meglio non ridimensionare il modulo in modo che corrisponda al controllo della vista griglia. Molto probabilmente, nella tua griglia vedrai molte più righe di quante potrebbero essere contenute nello schermo di Windows e non vuoi avere un modulo che si estende sotto l'area del desktop visibile. In generale, questo tipo di situazione è esattamente il motivo per cui si desidera avere una visualizzazione a griglia scorrevole per visualizzare più dati di quanti possano essere contenuti sullo schermo contemporaneamente.
"Per adattare le dimensioni del tuo form alle dimensioni di DataGridView, devi determinare tu stesso la dimensione" C'è un modo per farlo per favore? My DataGridView ha solo poche celle e solo in lettura. Ridimensionare il modulo per adattarlo non è affatto un problema, a parte il fatto che non conosco quanti pixel richiede il DGV. Molte grazie. – billpg
È possibile trovare la larghezza effettiva per conteggio Larghezza colonne.
Non dimenticare che il tuo modulo potrebbe essere più complesso e che dovresti contare su altri controlli.
public class YourForm : Form
{
public YourForm()
{
DataGridView _dgv = new DataGridView() { Dock = DockStyle.Fill};
Controls.Add(_dgv);
}
public void CorrectWindowSize()
{
int width = WinObjFunctions.CountGridWidth(_dgv);
ClientSize = new Size(width, ClientSize.Height);
}
DataGridView _dgv;
}
public static class WinObjFunctions
{
public static int CountGridWidth(DataGridView dgv)
{
int width = 0;
foreach (DataGridViewColumn column in dgv.Columns)
if (column.Visible == true)
width += column.Width;
return width += 20;
}
}
Vorrei andare nell'altra direzione e dimensionare la griglia nel modulo. (alcuni utenti potrebbero avere delle basse ris.) Imposta la proprietà 'WindowState' del modulo => massimizzata. (facoltativo) Imposta la proprietà 'anchor' del DGV => 'Superiore, Inferiore, Sinistra, Destra'.
Potrebbe essere possibile utilizzare la proprietà PreferredSize
(MSDN PreferredSize entry). Per i controlli DataGridView
, ho trovato che la larghezza e l'altezza preferite erano circa 20 unità più grandi di quanto mi aspettassi. Immagino che il controllo potrebbe calcolare le sue dimensioni preferite tenendo conto delle barre di scorrimento.
Un'altra avvertenza che ho rilevato è che il calcolo PreferredSize
non sarà accurato immediatamente dopo l'aggiunta o la modifica di elementi nella tabella. Per aggirare questo ho fatto un gestore per l'evento RowHeadersWidthChanged
.
Ecco cosa ha funzionato per me:
class GridToy {
private DataGridView grid;
public GridToy(DataGridView dgv) {
grid = dgv;
grid.RowHeadersWidthChanged += AdjustWidth; // Event handler.
Layout();
}
public void Layout() {
// Just do some arbitrary manipulation of the grid.
grid.TopLeftHeaderCell.Value = "Some Arbitrary Title";
}
public void AdjustWidth() {
Control horizontal = grid.Controls[0]; // Horizontal scroll bar.
Control vertical = grid.Controls[1]; // Vertical scroll bar.
grid.Width = grid.PreferredSize.Width - vertical.Width + 1;
grid.Height = grid.PreferredSize.Height - horizontal.Height + 1;
}
}
Non sono sicuro che RowHeadersWidthChanged sia l'evento migliore da ascoltare, ma sembra che il lavoro sia svolto. – amacleod
Hmm. Ulteriori sperimentazioni rivelano che 'PreferredSize' prende in considerazione anche la larghezza delle intestazioni di riga, anche se' RowHeadersVisible' è false. Sembra che mettere insieme le dimensioni della somma a mano sarà più affidabile. – amacleod
dataGridView1.AutoResizeColumns (DataGridViewAutoSizeColumnsMode.AllCells);
Spero che questo aiuti :)
int dgv_width = dataGridView1.Columns.GetColumnsWidth(DataGridViewElementStates.Visible);
int dgv_height = dataGridView1.Rows.GetRowsHeight(DataGridViewElementStates.Visible);
this.Width = dgv_width;
this.Height = dgv_height;
this.Width
ridimensiona questa larghezza modulo.
Ovviamente è necessario aggiungere valori fissi (ad esempio margine, altezza titolo modulo, ecc.). Con test Ho raggiunto i valori che lavorano per me (non chiedere perché ...):
this.Width = dgv_width + 147;
this.Height = dgv_height + 47;
È possibile impostare la "Altezza" proprietà su Auto in forma dopo la classificazione o utilizzando un ID e questo dovrebbe farlo ,,
Ho appena provato ..E ha funzionato
#form1{
background-color:white;
height:auto;
width:1500px;
border-top:medium solid #3399FF;
margin-top:100px;
margin-left:30px;
display: inline-block;
text-align: center;
float: none;
}
sto solo mettendo esattamente quello che ho fatto nel caso in cui hai perso .. Non preoccuparti per le altre proprietà lì per il mio progetto.
Set AutoSizeColumnsMode :Fill
in Proprietà griglia
- 1. Ridimensionamento automatico dei controlli di Windows Form
- 2. ExtJS: ridimensionamento automatico dei campi modulo al ridimensionamento della finestra
- 3. ridimensionamento automatico del testo (dimensione carattere) durante il ridimensionamento della finestra?
- 4. Ridimensionamento del testo Dimensione in un TextView
- 5. Prevenire JList dal ridimensionamento automatico
- 6. Pannello JavaFX all'interno del ridimensionamento automatico del pannello
- 7. NPOI Ridimensionamento automatico colonna
- 8. Ridimensionamento automatico della griglia al ridimensionamento della finestra
- 9. Composito scorrevole - ridimensionamento automatico - swt
- 10. CSS, ridimensionamento automatico div?
- 11. ridimensionamento e regolazione dei controlli del modulo secondo il ridimensionamento del modulo
- 12. Angolare nvd3 Ridimensionamento automatico del grafico a linee
- 13. Ridimensionamento dei controlli con ridimensionamento modulo
- 14. SWT tavolo: Ridimensionamento automatico tutte le colonne
- 15. limite sulla dimensione della stringa in C++?
- 16. Ridimensionamento automatico dell'immagine in PdfPCell con iTextSharp
- 17. Ridimensionamento automatico della larghezza del contenuto di UITableViewCell
- 18. Ridimensionamento automatico del testo dell'etichetta in Qt - comportamento strano
- 19. C# - DataGridView - Immagine e testo sulla stessa riga
- 20. Ridimensionamento automatico di un componente all'interno di GridBagLayout
- 21. WinForms C# DataGridView forzare l'aggiornamento
- 22. Voglio generare un clic in modo automatico su una riga DataGridView in C#
- 23. Sulla base del video all'interno di C#
- 24. jQuery - ridimensionamento del modulo in base alla larghezza del valore?
- 25. CSS: Ridimensionamento automatico div per adattarsi alla larghezza del contenitore
- 26. Come implementare lo scorrimento automatico in DataGridView?
- 27. Ridimensionamento automatico per il motore del contenitore Google
- 28. Tag HTML5 contro Div per ridimensionamento automatico
- 29. Ridimensionamento della dimensione del carattere per adattarsi verticalmente in UILabel
- 30. HighCharts: Come utilizzare il reflow per consentire il ridimensionamento automatico dopo aver modificato la dimensione
Come si fa a "determinare la dimensione del me stesso" per favore? Ho solo bisogno di sapere quanti pixel "vuole" il DGV. (Posso inserire limiti ragionevoli per impedire che il modulo diventi troppo grande.) – billpg