我在数据库表中有几行(我们称之为Customer),每行都由SNo编号,它会自动增加MS SQLServer中固有的标识属性。但是,当我删除特定行时,特定行号留空,但我希望表自动更正。
举个例子:
我有一个示例客户表,其中包含以下行:
SNo CustomerName Age
1 Dani 28
2 Alex 29
3 Duran 21
4 Mark 24
假设我删除第3行,表格如下:
SNo CustomerName Age
1 Dani 28
2 Alex 29
4 Mark 24
但我希望桌子看起来像这样:
SNo CustomerName Age
1 Dani 28
2 Alex 29
3 Mark 24
如何在c#中使用LINQ to SQL实现这一目标?这仅适用于gridview中的演示,我不希望在数据库表中更改SNo ,只是想向用户显示正确的顺序。
我正在使用以下代码行:
(db.Components.AsEnumerable().Select((iterator)=> new{iterator.SNo + 1})
但是我没有得到任何结果,我怎么能实现它,我只想让sno增加而不管数据库表中的值
请帮帮我
感谢您的期待
PS:请不要标记它或者因为某些原因你可能会在得到答案后删除
答案 0 :(得分:1)
渲染数据时,您可以 增加一个计数器并渲染它 作为行号。
如果您需要公开数据 消费,你可以添加一个新的 你的班级的“行号”属性, 从中获取数据后 数据库迭代数据, 增加新的财产。
但这似乎是一个渲染问题,所以我会选择1。
答案 1 :(得分:1)
您可以使用OnRowDataBound
活动和TemplateField
。
这样做:
在GridView声明中添加OnRowDataBound="GridView1_RowDataBound"
:
在GridView中添加TemplateField:
<asp:TemplateField HeaderText="Serial number">
<ItemTemplate>
<asp:Label ID="lblSerial" runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
在代码隐藏中添加它:
int i = 1;
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
Label lblSerial = (Label)e.Row.FindControl("lblSerial");
lblSerial.Text = i.ToString();
i++;
}
}
(source)
答案 2 :(得分:1)
这不会改变您的SNo,但会为LINQ返回的对象添加一个计数器(CustomerIterator)。
var customers = model1.Customers.AsEnumerable()
.OrderBy(x => x.SNo)
.Select((x, iterator) => new { x.SNo, CustomerIterator = iterator + 1, x.CustomerName, x.Age });
增量不是由“迭代器+ 1”部分完成,而是由此处的Select过载完成:http://msdn.microsoft.com/en-us/library/bb534869.aspx。 我刚刚添加了+ 1,因为计数器从0开始