public class DataGridTextBoxColumn : System.Windows.Forms.DataGridTextBoxColumn
{
private bool m_IsRedIfOverDue = false; public DataGridTextBoxColumn(string format, string headerText, string mappingName, int width)
{
base.Format = format;
base.HeaderText = headerText;
base.MappingName = mappingName;
base.Width = width;
} public DataGridTextBoxColumn(string format, string headerText, string mappingName,
int width, bool isRedIfOverDue)
{
base.Format = format;
base.HeaderText = headerText;
base.MappingName = mappingName;
base.Width = width;
m_IsRedIfOverDue = isRedIfOverDue;
} protected override void Edit(System.Windows.Forms.CurrencyManager source, int rowNum,
System.Drawing.Rectangle bounds, bool isReadOnly, string instantText, bool cellIsVisible)
{
// Do Nothing
// This is a ReadOnly DataGrid
} protected override void Paint(System.Drawing.Graphics g, System.Drawing.Rectangle bounds,
System.Windows.Forms.CurrencyManager source, int rowNum, System.Drawing.Brush backBrush,
System.Drawing.Brush foreBrush, bool alignToRight)
{
object bVal = GetColumnValueAtRow(source, rowNum); if (this.Format == "d")
{
try
{
// globalize for german
if (Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName == "de")
bVal = String.Format("{0:d}", Convert.ToDateTime(bVal).ToString("dd/MM/yy"));
else
bVal = String.Format("{0:d}", Convert.ToDateTime(bVal));
}
catch
{
// ignore an invalid cast
}
} // if the current row is this row, draw the selection back color
if (this.DataGridTableStyle.DataGrid.CurrentRowIndex == rowNum)
{
g.FillRectangle(new SolidBrush(this.DataGridTableStyle.SelectionBackColor), bounds);
g.DrawString(Convert.ToString(bVal), this.DataGridTableStyle.DataGrid.Font,
new SolidBrush(this.DataGridTableStyle.SelectionForeColor), bounds.X + 2, bounds.Y + 2);
}
else
{
g.FillRectangle(backBrush, bounds); if (m_IsRedIfOverDue)
{
try
{
if (Convert.ToDateTime(bVal).Date < DateTime.Now.Date)
g.DrawString(Convert.ToString(bVal), this.DataGridTableStyle.DataGrid.Font,
new SolidBrush(Color.Red), bounds.X + 2, bounds.Y + 2);
else
g.DrawString(Convert.ToString(bVal), this.DataGridTableStyle.DataGrid.Font, foreBrush,
bounds.X + 2, bounds.Y + 2);
}
catch
{
g.DrawString(Convert.ToString(bVal), this.DataGridTableStyle.DataGrid.Font, foreBrush,
bounds.X + 2, bounds.Y + 2);
}
}
else
{
g.DrawString(Convert.ToString(bVal), this.DataGridTableStyle.DataGrid.Font, foreBrush,
bounds.X + 2, bounds.Y + 2);
}
}
}看看这个!能否帮上,我想主要在重写Paint这里
{
private bool m_IsRedIfOverDue = false; public DataGridTextBoxColumn(string format, string headerText, string mappingName, int width)
{
base.Format = format;
base.HeaderText = headerText;
base.MappingName = mappingName;
base.Width = width;
} public DataGridTextBoxColumn(string format, string headerText, string mappingName,
int width, bool isRedIfOverDue)
{
base.Format = format;
base.HeaderText = headerText;
base.MappingName = mappingName;
base.Width = width;
m_IsRedIfOverDue = isRedIfOverDue;
} protected override void Edit(System.Windows.Forms.CurrencyManager source, int rowNum,
System.Drawing.Rectangle bounds, bool isReadOnly, string instantText, bool cellIsVisible)
{
// Do Nothing
// This is a ReadOnly DataGrid
} protected override void Paint(System.Drawing.Graphics g, System.Drawing.Rectangle bounds,
System.Windows.Forms.CurrencyManager source, int rowNum, System.Drawing.Brush backBrush,
System.Drawing.Brush foreBrush, bool alignToRight)
{
object bVal = GetColumnValueAtRow(source, rowNum); if (this.Format == "d")
{
try
{
// globalize for german
if (Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName == "de")
bVal = String.Format("{0:d}", Convert.ToDateTime(bVal).ToString("dd/MM/yy"));
else
bVal = String.Format("{0:d}", Convert.ToDateTime(bVal));
}
catch
{
// ignore an invalid cast
}
} // if the current row is this row, draw the selection back color
if (this.DataGridTableStyle.DataGrid.CurrentRowIndex == rowNum)
{
g.FillRectangle(new SolidBrush(this.DataGridTableStyle.SelectionBackColor), bounds);
g.DrawString(Convert.ToString(bVal), this.DataGridTableStyle.DataGrid.Font,
new SolidBrush(this.DataGridTableStyle.SelectionForeColor), bounds.X + 2, bounds.Y + 2);
}
else
{
g.FillRectangle(backBrush, bounds); if (m_IsRedIfOverDue)
{
try
{
if (Convert.ToDateTime(bVal).Date < DateTime.Now.Date)
g.DrawString(Convert.ToString(bVal), this.DataGridTableStyle.DataGrid.Font,
new SolidBrush(Color.Red), bounds.X + 2, bounds.Y + 2);
else
g.DrawString(Convert.ToString(bVal), this.DataGridTableStyle.DataGrid.Font, foreBrush,
bounds.X + 2, bounds.Y + 2);
}
catch
{
g.DrawString(Convert.ToString(bVal), this.DataGridTableStyle.DataGrid.Font, foreBrush,
bounds.X + 2, bounds.Y + 2);
}
}
else
{
g.DrawString(Convert.ToString(bVal), this.DataGridTableStyle.DataGrid.Font, foreBrush,
bounds.X + 2, bounds.Y + 2);
}
}
}看看这个!能否帮上,我想主要在重写Paint这里
(ListBox)做个下拉列表不好吗?
private void button1_Click(object sender, System.EventArgs e)
{
this.Cursor = Cursors.WaitCursor;
//降序
DataView myView = new DataView(this.dataSet11.Tables[0],"","id desc",DataViewRowState.CurrentRows);
this.dataGrid1.DataSource = myView;
this.Cursor = Cursors.Arrow;
}private void button2_Click(object sender, System.EventArgs e)
{
this.Cursor = Cursors.WaitCursor;
//升序
DataView myView = new DataView(this.dataSet11.Tables[0],"","id",DataViewRowState.CurrentRows);
this.dataGrid1.DataSource = myView;
this.Cursor = Cursors.Arrow;
tmp.DefaultView.Sort="id";//or "id desc"
Protected Overridable Sub Sort(ByVal dg As DataGrid, ByVal e As System.Web.UI.WebControls.DataGridSortCommandEventArgs)
Dim sortExpression As String
Dim isDesc As Boolean = False SetDataGridHeader(dg) If viewstate("sortcode").ToString = e.SortExpression Then
sortExpression = CStr(viewstate("sortcode"))
viewstate("sortcode") = viewstate("sortcode").ToString & " desc"
isDesc = True
Else
viewstate("sortcode") = e.SortExpression
sortExpression = e.SortExpression
isDesc = False
End If SetDataGridHeader(dg, sortExpression, isDesc)
End Sub Protected Overridable Sub SetDataGridHeader(ByVal dg As DataGrid) If Session("sortcode").ToString = "" Then Exit Sub Dim i, j, k As Integer
Dim headerText As String
Dim flag As String = "▲" For i = 0 To dg.Columns.Count - 1
headerText = dg.Columns(i).HeaderText
j = headerText.LastIndexOf("▲")
k = headerText.LastIndexOf("▼")
If j >= 0 Or k >= 0 Then
dg.Columns(i).HeaderText = headerText.Substring(0, headerText.Length - flag.Length)
Exit Sub
End If
Next End Sub