WinForm"DataGridView單元格提示和相關應用" 之配餐系統的開發

  在winform應用程序開發中,DataGridView是 用的較多的、也(幾乎)是數據(列表)顯示必用的控件,而此文就是針對DataGridView控件的一些使用作些講解。jquery

        一. DataGridView單元格提示windows

        這個熟悉的朋友會選擇CellToolTipTextNeeded 事件實現,也確實,然而此事件有個硬性的條件(或者說 讓人感受很不舒服的限制),如圖:ide

   上圖中 紅色區域[具體見msdn:http://msdn.microsoft.com/zh-cn/library/system.windows.forms.datagridview.celltooltiptextneeded(VS.80).aspx]就是我所說的限制,這樣當咱們想實現用代碼一行行add Row時,此事件就與咱們想要的發生衝突(沒法實現單元格提示) ——由於在 DataGridView綁定的數據源(設置了 DataSource)後 或 該控件的 VirtualMode 屬性爲 true (此時行數沒法改變),不能再動態添加行,但咱們想要的 單元格提示效果必須還得想辦法實現(在最初遇到此問題時,感受有點兒'山窮水盡疑無路'),然後靜下心去想,終用DataGridView的CellMouseEnter事件解決,代碼以下:this

   

代碼
    
    
             
    
    
canInfoDgv.CellMouseEnter += new DataGridViewCellEventHandler(canInfoDgv_CellMouseEnter);

void canInfoDgv_CellMouseEnter( object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex > - 1 )
{
DataGridView dgv
= (DataGridView)sender;
DataGridViewCell cellObj
= dgv.Rows[e.RowIndex].Cells[e.ColumnIndex];
switch (dgv.Columns[e.ColumnIndex].Name)
{
case " colswName " : cellObj.ToolTipText = " 點擊瀏覽此食物詳細信息! " ; break ;
case " colswWeight " : cellObj.ToolTipText = " 點擊編輯此食物重量! " ; Console.WriteLine( " canInfoDgv_CellMouseEnter : " + cellObj.Value.ToString()); break ; //
case " colswYl " : SetColswYl_ToolTip(cellObj); break ;
case " colEdit " : cellObj.ToolTipText = " 點擊編輯菜餚的組成! " ; break ;
case " colDo " : cellObj.ToolTipText = " 點擊刪除此食物! " ; break ;
default : break ;
}
dgv
= null ;
cellObj
= null ;
}
}

 

運行效果:spa

 

 

       2.DataGridView屬性設置的通用方法code

     

代碼
    
    
             
    
    
/// <summary>
/// 設置DataGridView通用屬性
/// </summary>
/// <param name="dgv"></param>
protected void SetDgv_Com(DataGridView dgv)
{
dgv.AllowUserToAddRows
= false ;
dgv.AllowUserToResizeColumns
= false ;
dgv.AllowUserToResizeRows
= false ;
dgv.RowHeadersVisible
= false ;
dgv.EditMode
= DataGridViewEditMode.EditOnEnter;
// 綁定時不自動建立列(解決列的位置不固定)
dgv.AutoGenerateColumns = false ;
}

/// <summary>
/// 設置DataGridView交替行樣式
/// </summary>
/// <param name="dgv"></param>
/// <param name="deRowColor"> 默認行顏色 </param>
/// <param name="altRowColor"> 交替行顏色 </param>
protected void SetDgv_AlternatingRowColor(DataGridView dgv, Color deRowColor, Color altRowColor)
{
dgv.RowsDefaultCellStyle.BackColor
= deRowColor;
dgv.AlternatingRowsDefaultCellStyle.BackColor
= altRowColor;
}

/// <summary>
/// 設置 DataGridView 特殊樣式 [無邊框 內容居中 設置表頭背景色]
/// </summary>
protected void SetDgv_SpecialStyle(DataGridView dgvObj, Color HeaderBgColor,Color selectedCellBgColor)
{
SetDgv_SpecialStyle(dgvObj, HeaderBgColor, selectedCellBgColor, System.Drawing.SystemColors.Window,
true );
}

/// <summary>
/// 設置 DataGridView 特殊樣式 [無邊框 內容居中 設置表頭背景色]
/// </summary>
protected void SetDgv_SpecialStyle(DataGridView dgvObj, Color HeaderBgColor, Color selectedCellBgColor,Color bgColor, bool isNoBorder)
{
dgvObj.BackgroundColor
= bgColor;
if (isNoBorder)
{
dgvObj.BorderStyle
= BorderStyle.None;
dgvObj.CellBorderStyle
= DataGridViewCellBorderStyle.None;
dgvObj.ColumnHeadersBorderStyle
= DataGridViewHeaderBorderStyle.None;
}

// 設置單元格內容居中顯示 ColumnHeadersDefaultCellStyle:是設置列標題的樣式
dgvObj.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
if (selectedCellBgColor != null )
dgvObj.DefaultCellStyle.SelectionBackColor
= selectedCellBgColor;

dgvObj.DefaultCellStyle.SelectionForeColor
= Color.Black;
dgvObj.ColumnHeadersDefaultCellStyle.Alignment
= DataGridViewContentAlignment.MiddleCenter;
dgvObj.ColumnHeadersDefaultCellStyle.BackColor
= HeaderBgColor;
dgvObj.EnableHeadersVisualStyles
= false ;
}

 

        寫的很簡單,但願對你們多提意見,‘板磚’也悅收,——「您的支持,是我寫下去的動力!」。orm

相關文章
相關標籤/搜索