Monday, February 27, 2017
8
Cái này thực chất là task từ thời thử việc và mình đã phải mất 1 ngày để search và cuối cùng là không ra LOL
May mà lập topic hỏi đội support devexpress họ trả lời cho nên nhớ mãi :)
Trước hết là cần phải hiểu là cái cột số thứ tự này không phải là 1 cột dữ liệu trong gridcontrol (nếu dễ thế thì đã ko mất 1 ngày để search :D) vì nếu là cột dữ liệu thì mình sẽ phải care code cả cái khoản khi end-user sort, filter thì STT của chúng ta sẽ phải thay đổi (hơi loạn nếu muốn ăn sẵn sort và filter của devexpress). Cái cột số thứ tự mà mình muốn ở đây là indicator trong cấu trúc của 1 gridcontrol

OK, có 2 event của gridview cần sử dụng là CustomDrawRowIndicator và RowCountChanged, rồi ốp đống code này vào là done

  bool indicatorIcon = true;
        private void gridView1_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
        {
            try
            {
                GridView view = (GridView)sender;
                if (e.Info.IsRowIndicator && e.RowHandle >= 0)
                {
                    string sText = (e.RowHandle + 1).ToString();
                    Graphics gr = e.Info.Graphics;
                    gr.PageUnit = GraphicsUnit.Pixel;
                    GridView gridView = ((GridView)sender);
                    SizeF size = gr.MeasureString(sText, e.Info.Appearance.Font);
                    int nNewSize = Convert.ToInt32(size.Width) + GridPainter.Indicator.ImageSize.Width + 10;
                    if (gridView.IndicatorWidth < nNewSize)
                    {
                        gridView.IndicatorWidth = nNewSize;
                    }

                    e.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
                    e.Info.DisplayText = sText;
                }
                if (!indicatorIcon)
                    e.Info.ImageIndex = -1;

                if (e.RowHandle == GridControl.InvalidRowHandle)
                {
                    Graphics gr = e.Info.Graphics;
                    gr.PageUnit = GraphicsUnit.Pixel;
                    GridView gridView = ((GridView)sender);
                    SizeF size = gr.MeasureString("STT", e.Info.Appearance.Font);
                    int nNewSize = Convert.ToInt32(size.Width) + GridPainter.Indicator.ImageSize.Width + 10;
                    if (gridView.IndicatorWidth < nNewSize)
                    {
                        gridView.IndicatorWidth = nNewSize;
                    }

                    e.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
                    e.Info.DisplayText = "STT";
                }
            }
            catch (Exception ex)
            {
            }
        }

        private void gridView1_RowCountChanged(object sender, EventArgs e)
        {
            GridView gridview = ((GridView)sender);
            if (!gridview.GridControl.IsHandleCreated) return;
            Graphics gr = Graphics.FromHwnd(gridview.GridControl.Handle);
            SizeF size = gr.MeasureString(gridview.RowCount.ToString(), gridview.PaintAppearance.Row.GetFont());
            gridview.IndicatorWidth = Convert.ToInt32(size.Width + 0.999f) + GridPainter.Indicator.ImageSize.Width + 10;
        }

8 comments:

  1. Replies
    1. bạn download example bên dưới xem được không ? bạn dùng bản devexpress bao nhiêu?

      Delete
    2. This comment has been removed by the author.

      Delete
    3. sao mình tìm k thấy 2 thuộc tính này vậy bác

      Delete
  2. cho mình hỏi 2 sự kiện đso nằm đâu vậy , mình tìm mãi k thấy

    ReplyDelete
    Replies
    1. xin lỗi vì miss question của bạn, 2 thuộc tính đó nó là của gridview, bạn chứ ý là gridview chứ không phải gridcontrol nhé. trong example mình có đấy bạn

      Delete