Как предотвратить добавление строки в GridView во время привязки - PullRequest
1 голос
/ 04 марта 2012

У нас есть GridView, которые связываются с некоторыми данными, и это выглядит так:

RowNumber        Id                   Desc
-------------------------------------------
   1                20                  Desc1   
   2                30                  Desc2   
   3                40                  Desc3   
   4                50                  Desc4   

Я создаю RowNumber, используя этот код:

<asp:TemplateField HeaderText="">
    <ItemTemplate>
        <asp:Label ID="lblSlNo" runat="server" Text='<% #Container.DataItemIndex + 1 %>' />
    </ItemTemplate>
    <HeaderStyle HorizontalAlign="Center" />
    <ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>

Итак, учитывая, что при связывании данных я не хочу показывать вторую строку, но я хочу оставить для нее RowNumber Данные должны отображаться так:

RowNumber        Id                   Desc
-------------------------------------------
   1                20                  Desc1   
   3                40                  Desc3   
   4                50                  Desc4   

Как предотвратить добавление строки в GridView во время привязки данных?

Ответы [ 5 ]

4 голосов
/ 04 марта 2012

Попробуйте это:

void GridView_RowDataBound(Object sender, GridViewRowEventArgs e)
{
    if (row.RowType == DataControlRowType.DataRow){
        e.Row.Visible = SomeCondition;
    }
}

Где someCondition - ваша проверка.

1 голос
/ 04 марта 2012

OnRowDataBound ваш друг здесь

в файле ASPX, для сетки данных укажите событие OnRowDataBound

<GridView ID="ResultsGridView" runat="server"   onRowDataBound="ResultsGridView_RowDataBound">

затем перейдите в CS файл:

protected void ResultsGridView_RowDataBound(Object sender, GridViewRowEventArgs e)
{
    if (e.Row.Cells[1].value)//check your value here
    {
        e.Row.Visible = false;
    }        
}
1 голос
/ 04 марта 2012

Лучший способ: не выбирать эту строку в СУБД.

Например (в SQL-сервере> = 2005):

WITH cte AS(
    SELECT Id                   
           ,Desc
           ,ROW_NUMBER()OVER(Order By ID)As RowNumber
    FROM Table
)
SELECT * FROM cte
where RowNumber != 2
ORDER BY RowNumber 

http://msdn.microsoft.com/en-us/library/ms186734.aspx

0 голосов
/ 04 марта 2012

попробуйте так, вы можете вызвать функцию на стороне сервера, используя Eval, если она возвращает true, затем использовать RowNumbe или назначить ей пустое значение

<asp:Label ID="lblSlNo" runat="server" Text='<%# ((Eval("yourColumn") ==SomeCondition ? (Eval(Container.DataItemIndex + 1) : Eval("")) %>'></asp:Label>
0 голосов
/ 04 марта 2012

Сделать это на стороне базы данных

select * from 
(
select Row_Number() over(order by ID) RowNumber,        Id,   Desc
) a
where RowNumber<>2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...