简体   繁体   English

在C#中对内部datagridview进行排序

[英]Sorting Inside datagridview in c#

I am having datagridview in c# 我在C#中有datagridview

I populated data inside datagridview. 我在datagridview中填充了数据。

I created Serial No inside datagridview along with other columns. 我与其他列一起在datagridview内部创建了SerialNo。

If i click serial no head,the serial no is sorted. 如果我单击序列号,则对序列号进行排序。 If i do sorting in other columns,the serial no is also sorted. 如果我在其他列中进行排序,则序列号也将进行排序。

How to avoid sorting serial no, if I click other column headers. 如果我单击其他列标题,如何避免对序列号进行排序。

I have given the code below 我给了下面的代码

         dsstock = new DataSet();
        dsstock = fetchDataSetValues(statement);
      //  grdStock.Rows.Clear();
        if (dsstock.Tables[0].Rows.Count > 0)
        {
            grdStock.Columns.Add("Sl. No.", "Sl. No.");
            grdStock.Columns[0].Width = 80;

            grdStock.Columns.Add("ItemID", "Item ID");
            grdStock.Columns[1].Width =300;
            grdStock.Columns.Add("ItemName", "Item Name");
            grdStock.Columns[2].Width = 600;
            grdStock.Columns.Add("ItemQuantity", "Item Quantity");
            grdStock.Columns[3].Width = 150;
            int row = dsstock.Tables[0].Rows.Count - 1;

            for (int r = 0; r <= row; r++)
            {
                grdStock.Rows.Add();
                grdStock.Rows[r].Cells[0].Value = r + 1;
                grdStock.Rows[r].Cells[1].Value = dsstock.Tables[0].Rows[r].ItemArray[0];
                grdStock.Rows[r].Cells[2].Value = dsstock.Tables[0].Rows[r].ItemArray[1];
                grdStock.Rows[r].Cells[3].Value = dsstock.Tables[0].Rows[r].ItemArray[2];

            }
        }

Thanks 谢谢

Chandran 昌德兰

If I understand correctly, you want a way to keep the rows numbered the same regardless of which data is there (like Excel does). 如果我理解正确,那么您将需要一种不管行上有哪些数据都使行编号保持相同的方法(就像Excel一样)。 That seems odd to me if you are assigning a serial number to each item/row, but anyway there is a simple solution at Show row number in row header of a DataGridView . 如果您要为每个项目/行分配一个序列号,那对我来说似乎很奇怪,但是无论如何,在DataGridView的行标题中的Show row number处有一个简单的解决方案。 (You can see a screenshot at https://stackoverflow.com/a/14915110/116891 .) (您可以在https://stackoverflow.com/a/14915110/116891上查看屏幕截图)。

private void dgGrid_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
    var grid = sender as DataGridView;
    var rowIdx = (e.RowIndex + 1).ToString();

    var centerFormat = new StringFormat() 
    { 
        // right alignment might actually make more sense for numbers
        Alignment = StringAlignment.Center, 
        LineAlignment = StringAlignment.Center
    };

    var headerBounds = new Rectangle(e.RowBounds.Left, e.RowBounds.Top, grid.RowHeadersWidth, e.RowBounds.Height);
    e.Graphics.DrawString(rowIdx, this.Font, SystemBrushes.ControlText, headerBounds, centerFormat);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM