Динамические изменения в ASP: столбец GridView - PullRequest
1 голос
/ 02 августа 2010

Я создал GridView, столбцы которого создаются динамически на основе моего источника данных.Один из столбцов - это поле состояния, в котором отображается Да? Нет изображения на основе поля состояния в базе данных.

<asp:TemplateField HeaderText="Status">                                                                 
   <ItemTemplate>
    <asp:Image runat="server" ImageAlign="Middle" ID="imgStatus" ImageUrl= '<%# "/images/actions/" + ((Convert.ToInt32(Eval("StatusFlag")) == 0) ? "actionInActive.gif" : "actionActive.gif") %>' ToolTip='<%# ((Convert.ToInt32(Eval("StatusFlag")) == 0) ? "No" : "Yes") %>' />
    </ItemTemplate>
    <ItemStyle HorizontalAlign="Center" Width="40px"/>
</asp:TemplateField>   

Но отображение статуса для каждой строки в таблице создает много визуального шума на странице.Таким образом, вместо этого подхода я хотел бы отображать только статус «да», если на странице больше записей, и отображать оба значка [Да / Нет], если записей мало.

Может кто-нибудь дать некоторые предложения дляКак этого достичь?

Спасибо!

Ответы [ 2 ]

1 голос
/ 02 декабря 2010

Вы можете легко скрыть весь столбец следующим образом.

myGridView.DataBind();
if (myGridView.Rows.Count > Threshold)
    myGridView.Columns[StatusColumnIndex].Visible = false;

Чтобы отображать только записи "Да", вы можете использовать LINQ для фильтрации при привязке.

if (myData.Length > Threshold)
{
    myGridView.DataSource = myData.Where(d => d.Status == Status.Yes);
    myGridView.Columns[StatusColumnIndex].Visible = false;
}
else
{
    myGridView.DataSource = myData;
    myGridView.Columns[StatusColumnIndex].Visible = true;
}
myGridView.DataBind();
1 голос
/ 02 декабря 2010

Что я могу понять по вашему вопросу, так это то, что вы хотите две вещи

*). Если записей несколько, то вы хотите показать две вещи в каждой строке: изображение статуса и статус.

*). Если записей много, вам нужно отображать только текст статуса, а не изображение.

Если я прав, то решение здесь:

Добавьте два элемента управления в ItemTemplate Image и html label и в зависимости от условия измените их видимость. Как это

 <asp:TemplateField HeaderText="Status">
    <ItemTemplate>
       <asp:Image Visible='<%# Check(Convert.ToString(Eval(Image))) %>' ID="img" runat="server" ImageUrl='<% Eval(Image) %>' /> 
       // for ImageUrl, you can put more condition for 'yes' and 'no' image.
       <asp:Label Visible='<%# Check(Convert.ToString(Eval(Image)))  %>' ID="status" Text='<% Eval(Status) %>' runat = "server" />
    </ItemTemplate>
 </asp:TemplateField>

Теперь в вашем источнике данных вы должны внести некоторые изменения в соответствии с вашими потребностями, например: При связывании вы решите, хотите ли вы показывать изображение или нет, если нет, то измените значение изображения источника данных на «#». Теперь проверка (строка imageUrl) является кодом функции

   public bool Check(string title)
    {
        if (title == "#")
            return false;
        else
            return true;
    }

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...