Автоматически упорядочить SNo в таблице, используя LINQ - PullRequest
1 голос
/ 03 мая 2011

У меня есть пара строк в таблице базы данных (давайте назовем это 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

Как мне добиться этого с помощью LINQ to SQL в c #? Это только для представления в виде сетки, я не хочу, чтобы SNo менялся в таблице базы данных , просто хочу показать правильный порядок для пользователей.

Я использую следующие строки кода:

(db.Components.AsEnumerable().Select((iterator)=> new{iterator.SNo + 1})

Но я не получаю никакого результата, как я могу его достичь, я просто хочу увеличить sno независимо от значения в таблице базы данных

Пожалуйста, помогите мне

Спасибо в ожидании

PS: пожалуйста, не отмечайте это или понижайте по какой-то причине, которую вы можете удалить после получения ответа

Ответы [ 3 ]

1 голос
/ 03 мая 2011

Вы можете сделать это с OnRowDataBound Событием и TemplateField.

Сделайте это:

  1. Добавьте OnRowDataBound="GridView1_RowDataBound" в ваше объявление GridView:

  2. Добавить TemplateField внутри вашего GridView:

                <asp:TemplateField HeaderText="Serial number">
                    <ItemTemplate>
                        <asp:Label ID="lblSerial" runat="server"></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
    
  3. Добавьте это в коде:

    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++;
        }
    }
    

( источник )

1 голос
/ 03 мая 2011

Это не изменяет ваш SNo, но добавляет счетчик (CustomerIterator) к объектам, возвращаемым LINQ.

var customers = model1.Customers.AsEnumerable()
  .OrderBy(x => x.SNo)
  .Select((x, iterator) => new { x.SNo, CustomerIterator = iterator + 1, x.CustomerName, x.Age });

Увеличение выполняется не частью "iterator + 1", а перегрузкой Select.нашел здесь: http://msdn.microsoft.com/en-us/library/bb534869.aspx. Я просто добавил + 1, потому что счетчик начинается с 0

1 голос
/ 03 мая 2011
  1. При рендеринге данных вы можете увеличить счетчик и сделать это в качестве номера строки.

  2. Если вам нужно выставить данные для потребление, вы можете добавить новый свойство "номер строки" для вашего класса, затем после получения данных из база данных перебирает данные, увеличение нового свойства.

Но это похоже на проблему рендеринга, поэтому я бы выбрал 1.

...