我有一個datagridview編碼在c#.net
我的要求是,如果我選擇任何DataGridView單元格的單元格內容應該是可見較大的彈出,或我想查看datagridview當我的光標移動到特定的單元格時,單元格變大或合適。使選定的DataGridView單元格內容更大
0
A
回答
0
對於文本和數字,這可能做什麼,你需要:
private void dataGridView1_CellPainting(object sender,
DataGridViewCellPaintingEventArgs e)
{
if (e.RowIndex < 0 | e.ColumnIndex < 0) return;
if (dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Selected)
{
e.Graphics.FillRectangle(SystemBrushes.Highlight, e.CellBounds);
e.Graphics.DrawString(e.Value.ToString(), new Font(e.CellStyle.Font.FontFamily,
e.CellStyle.Font.Size * 1.5f), SystemBrushes.HighlightText, e.CellBounds.Location);
e.Handled = true;
}
}
您可能需要使用e.FormattedValue
而不是e.Value
如果你正在使用的格式
您可能還需要插入的測試單元格值的類型..
此代碼會將字體放大50%,而不處於編輯模式。
對於圖像不同的解決方案將是必要的 - 可能是一個彈出式標籤或面板;但這真的取決於你想要什麼和他們是什麼樣的圖像。圖標我會離開,用戶的照片將從放大的顯示中獲益。
當然,如果放大的內容實際不適合在Cell彈出溶液也將被稱爲爲..
Upadate
這裏是一個測試柱的延伸Value/FormattedValue
和爲Bitmap
顯示Image
在彈出Label
:
Label imageLabel;
bool labelHide = false; //*** new
void showImageLabel(DataGridViewCellPaintingEventArgs e)
{
if (labelHide) return; //*** new
if (imageLabel == null) imageLabel = new Label();
imageLabel.Click += (sender, evt) =>
{ ((Label)sender).Hide(); labelHide = true; }; //*** new
imageLabel.Text = "";
imageLabel.Parent = dataGridView1;
imageLabel.Location = e.CellBounds.Location;
if (imageLabel.Image != null) imageLabel.Image.Dispose();
//Size size = ((Bitmap)e.Value).Size; //*** old
Size size = ((Bitmap)e.FormattedValue).Size; //*** new
Size newSize = new Size((int)(size.Width * 1.5f), (int)(size.Height * 1.5f));
//Bitmap bmp = new Bitmap((Bitmap)e.Value, newSize); //*** old
Bitmap bmp = new Bitmap((Bitmap)e.FormattedValue, newSize); //*** new
imageLabel.Size = newSize;
imageLabel.Image = bmp;
imageLabel.Show();
}
private void dataGridView1_CellPainting(object sender,
DataGridViewCellPaintingEventArgs e)
{
if (e.RowIndex < 0 | e.ColumnIndex < 0) return;
if (e.Value == null) { if (imageLabel != null) imageLabel.Hide(); return; }
if (dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Selected)
{
//if (e.Value.GetType() == typeof(Bitmap)) //*** old
if (e.FormattedValue.GetType() == typeof(Bitmap)) //*** new
{
showImageLabel(e);
e.Handled = true; //*** old
if (labelHide) labelHide = false; else e.Handled = true; //*** new
return;
}
else if (imageLabel != null) imageLabel.Hide();
e.Graphics.FillRectangle(SystemBrushes.Highlight, e.CellBounds);
e.Graphics.DrawString(e.FormattedValue.ToString(),
new Font(e.CellStyle.Font.FontFamily, e.CellStyle.Font.Size * 1.5f),
SystemBrushes.HighlightText, e.CellBounds.Location);
e.Handled = true;
}
}
private void dataGridView1_RowLeave(object sender, DataGridViewCellEventArgs e)
{
if (imageLabel != null) imageLabel.Hide();
}
您可能需要調整位置是如居中..
更新2
我現在已經適應的代碼直接從數據庫中檢索作爲Images
byte[]
的情況下。在這種情況下,Value
財產的Type
不是Image
。相反,一個simlpy需要檢查FormattedValue
。
如果顯示的,調整大小的Image
太大,它可能覆蓋整個Cell
並且Cell_Painting
事件不會被觸發。因此,我還爲RowLeave
事件添加了一行,以防止發生這種情況。
我還添加了幾行讓圖像被點擊。
請更改我標記爲// ***的行,添加事件並檢查它是否適用於您!
這裏有兩個截圖:
相關問題
- 1. 從DataGridView獲取選定行的單元格的內容
- 2. 刪除DatagridView的單元格內容
- 3. Wpf datagridview包裝單元格內容
- 4. UICollectionView更新特定單元格的單元格內容
- 5. 複選框狀態基於Datagridview的單元格內容列
- 6. 根據條件更改datagridview中單元格的內容
- 7. dataGridView中選定的單元格
- 8. 清除數據綁定datagridview中的單元格內容
- 9. 固定大小的HTML表格單元格,即使內容太大?
- 10. 更改單元格的內容,具體取決於單元格中的內容
- 11. 顯示爲datagridview的單槓爲溢出單元格內容
- 12. 使用輸入表單更改表格的單元格內容
- 13. 自定義datagridview單元格?
- 14. DataGridView單元格自定義
- 15. 如何重複選定的單元格或單元格的內容?
- 16. UItableView單元格內容大小爲iPad
- 17. 如何指定大蝦截斷表格單元格內容?
- 18. DataGridView單元格
- 19. 如果DataGridView的單元格值大於另一個單元格
- 20. 單元格值更改時更新dataGridView
- 21. 訪問單元格datagridview的內容Winform C#
- 22. 基於Datagridview C#中的內容着色組單元格#
- 23. 還原DataGridView的單元格內容原值
- 24. 單元格內容刪除後保存DataGridView的最佳做法
- 25. 表格單元格內容
- 26. 單元格內容(Textview)只觸摸單元格後更新
- 27. 當前單元格被更改時清除單元格內容
- 28. 如何使固定大小的表格單元格與其內容無關
- 29. winforms gridview單元格內容已更改
- 30. Datagridview更改非空單元格的單元格顏色
會不會有在細胞哪些類型的內容?只是文本和數字或圖像,按鈕等?另外:放大後內容是否仍可編輯? – TaW 2014-09-11 10:52:21
主要內容是文字和圖片,有些是數字......最後所有類型的表演都在那裏@TaW – 2014-09-11 10:58:41
你解決了你的問題嗎? – TaW 2014-09-18 07:26:39