我正在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);
}
}
再次感谢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());
}
}
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);
}));
}
如果您现在也想要它,这是一个用于在屏幕上显示消息的程序,例如,在迪斯科舞厅中,用户将消息从移动设备发送到由模型连接到PC的号码和消息将显示在其上,实际上我正在朋友迪斯科进行测试。
再次感谢您的帮助!
编辑:为谁可以帮助我修复表格,增加了50点声望的赏金。
答案 0 :(得分:3)
您可以使用datagridview的RowsAdded事件。在该方法中,您可以编写代码来对datagridview进行排序。
private void dataGridView1_RowsAdded(object sender,
DataGridViewRowsAddedEventArgs e)
{
datagridview1.Sort();
}
答案 1 :(得分:3)
终于搞定了! 我做了什么:
DataGridViewColumn column = dataGridView1.SortedColumn;
ListSortDirection order;
if (dataGridView1.SortOrder.Equals(SortOrder.Ascending))
{
order = ListSortDirection.Ascending;
}
else
{
order = ListSortDirection.Descending;
}
dataGridView1.Sort(column, order);
所以,我得到了排序列,然后我检查了一个if datadridview排序的顺序是什么,然后我再次排序使用为相同顺序排序的列... 请注意,此代码是新鲜的,因此它不是“防弹”我不检查列和顺序的值是否为空! 如果您需要此代码并使用它,请记住这一点! 这几乎就像Jayesh的答案。 谢谢大家的帮助!
答案 2 :(得分:0)
如果绑定了DataGridView,则可以使用:
dataGridView1.Columns[0].ValueType = typeof(System.Int32);
dataGridView1.Columns[0].CellTemplate.ValueType = typeof(System.Int32);
如果您的DataGridView未绑定,您可以使用SortCompare处理程序对值进行排序,例如:
public Form1()
{
InitializeComponent();
dataGridView1.SortCompare += new DataGridViewSortCompareEventHandler(dataGridView1_SortCompare);
}
然后这样做:
void dataGridView1_SortCompare(object sender, DataGridViewSortCompareEventArgs e)
{
if (e.Column.Index == 0)
{
if ( int.Parse(e.CellValue1.ToString()) > int.Parse(e.CellValue2.ToString()))
{
e.SortResult = 1;
}
else if (int.Parse(e.CellValue1.ToString()) < int.Parse(e.CellValue2.ToString()))
{
e.SortResult = -1;
}
else
{
e.SortResult = 0;
}
e.Handled = true;
}
}
答案 3 :(得分:0)
另一件事可能是,如果数据网格被一个存储过程绑定,你可以添加一个ORDER BY子句,它会根据你想要的数据排序......