【发布时间】:2009-09-09 17:11:22
【问题描述】:
我对 GridView 有一个奇怪的问题。我设置了一个 Select 列,并允许排序。如果我选择一行,然后对网格进行排序,则选择保持不变并且网格排序。也就是说,突出显示的行发生了变化,但选择的索引似乎没有。
查看手表中的网格,似乎 selected index 属性实际上保持不变,但 selected 数据键正在改变。
我很困惑,一直无法追查为什么会发生这种情况,有什么想法吗?
【问题讨论】:
我对 GridView 有一个奇怪的问题。我设置了一个 Select 列,并允许排序。如果我选择一行,然后对网格进行排序,则选择保持不变并且网格排序。也就是说,突出显示的行发生了变化,但选择的索引似乎没有。
查看手表中的网格,似乎 selected index 属性实际上保持不变,但 selected 数据键正在改变。
我很困惑,一直无法追查为什么会发生这种情况,有什么想法吗?
【问题讨论】:
我发现a change request for this exact issue 声明如下:
我们不保留这是设计使然 跟踪各种选择, 更新、删除等。这部分将 不可更改。
看起来您将需要一种不同的方式来跨排序跟踪所选行。
【讨论】:
实际上,我找到了解决这个问题的方法,也许不是那么甜蜜,但无论如何,我得到了我想要的 :) 在 GridView_PreRender 加载事件中
protected void GridView1_PreRender(object sender, EventArgs e) { //如果文本太长,则将其截断..
if (GridView1.Controls.Count != 0)
{
foreach (GridViewRow r in GridView1.Controls[0].Controls)
{
foreach (TableCell tc in r.Controls)
{
if (tc.Text != "" && tc.Text.Length > 39)
{
tc.Text = tc.Text.Substring(0, 39) + " ...";
}
}
}
}
// here is the where the magic happens :)
if (GridView1.SelectedRow != null)
{
GridViewRow row = GridView1.SelectedRow;
if (row.Cells.Count > 1)
{
//Here I pick the p.keyID
SetOrderData(Convert.ToInt32(row.Cells[1].Text));
this.LabelDebug.Text = row.Cells[1].Text;
}
}
}
【讨论】: