DataGridView自动重新排序

Joã*_*lva 5 c# sorting datagridview

我正在用C#创建一个接收sms并显示给用户的程序,我遇到了这类数据的问题.

例如,如果用户按ids对表进行排序,从较高的id到较低的id,那么当新的sms到达时它会到达表的顶部,新的短信无论如何都会到达表的底部.

这是一个截图

在此输入图像描述

正如您所看到的,id 125在0之下,而不是在表的顶部...

我应该使用任何代码或事件吗?

我想在那里开始那个活动:

public void readSms()
{
    try
    {
        comm = AppData.getInstance().getComm();

        DecodedShortMessage[] messages = comm.ReadMessages(PhoneMessageStatus.All, "SM");
        foreach (DecodedShortMessage message in messages)
        {
            if (AppData.getInstance().mensagens.Count != 0)
            {
                Message msg = new Message(
                    AppData.getInstance().messages.Last.Value.getId() + 1,
                    ((SmsDeliverPdu)(message.Data)).OriginatingAddress,
                    message.Data.UserDataText,
                    ((SmsDeliverPdu)(message.Data)).SCTimestamp.ToDateTime(), 
                    false);
                    AppData.getInstance().setMensagem(msg);
            }
            else 
            {
                Message msg = new Message(
                   0, 
                   ((SmsDeliverPdu(message.Data)).OriginatingAddress,
                   message.Data.UserDataText,
                   ((SmsDeliverPdu)(message.Data)).SCTimestamp.ToDateTime(), 
                    false);
                AppData.getInstance().setMensagem(msg);
            }
        }

        // I need to put the event of sorting here in case any message was been added              
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}
Run Code Online (Sandbox Code Playgroud)

再次感谢Edper的帮助!

有时我在程序中添加消息:

public void preencherTabela(int lastIndex)
{
    LinkedList<Message> messages = AppData.getInstance().getMessagessList();  
    {
        addTable(
            messages.ElementAt(i).getId(), 
            messages.ElementAt(i).getChecked(),
            messages.ElementAt(i).getMsg(),
            messages.ElementAt(i).getNum(),
            messages.ElementAt(i).getDate());
     }
}
Run Code Online (Sandbox Code Playgroud)

AddTable方法:

private void addTable(int p, bool p_2, string p_3, string p_4, DateTime dateTime)
{
    this.dataGridView1.Invoke(
        new MethodInvoker(() =>
        {
            this.dataGridView1.Rows.Add(p, p_2, p_3, p_4, dateTime); 
        }));
}
Run Code Online (Sandbox Code Playgroud)

如果您现在也想要它,这是一个用于在屏幕上显示消息的程序,例如,在迪斯科舞厅中,用户将消息从移动设备发送到由模型连接到PC的号码,消息将显示它,实际上我在朋友迪斯科测试它.

再次感谢您的帮助!

编辑:为谁可以帮助我修复桌面添加了50点声望的赏金.

Joã*_*lva 3

终于成功了!这就是我所做的:

DataGridViewColumn column = dataGridView1.SortedColumn;
ListSortDirection order;

if (dataGridView1.SortOrder.Equals(SortOrder.Ascending))
   {
       order = ListSortDirection.Ascending;
   }
else
   {
       order = ListSortDirection.Descending;
   }

dataGridView1.Sort(column, order);
Run Code Online (Sandbox Code Playgroud)

因此,我得到了排序后的列,然后检查了 datagridview 的排序顺序,然后我再次对使用相同顺序排序的列进行排序...请注意,这段代码是新鲜的,所以它不是“防弹”我不检查列的值和顺序是否为空!如果您需要此代码并使用它,请记住这一点!这几乎就像 Jayesh 的回答一样。谢谢大家的帮助!