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这里

解决方案 »

  1.   

    个人认为没有必要...
    (ListBox)做个下拉列表不好吗?
      

  2.   

    //假设有一列为ID
    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;
      

  3.   

    DataTable tmp;//这是你绑定到DataGrid的table
                    tmp.DefaultView.Sort="id";//or "id desc"
      

  4.   

    问题解决了.谢谢hanbinghai(海宁)和Eddie005(♂) 暴赱 『零零伍』 (︶︵︶) 给分!
      

  5.   

    '排序
            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