Кто-либо знает о способе скрыть столбец в asp.net listview?

Когда вы объявляете ссылочную переменную (т. е. объект), вы действительно создаете указатель на объект. Рассмотрим следующий код, в котором вы объявляете переменную примитивного типа int:

int x;
x = 10;

В этом примере переменная x является int, и Java инициализирует ее для 0. Когда вы назначаете его 10 во второй строке, ваше значение 10 записывается в ячейку памяти, на которую указывает x.

Но когда вы пытаетесь объявить ссылочный тип, произойдет что-то другое. Возьмите следующий код:

Integer num;
num = new Integer(10);

Первая строка объявляет переменную с именем num, но она не содержит примитивного значения. Вместо этого он содержит указатель (потому что тип Integer является ссылочным типом). Поскольку вы еще не указали, что указать на Java, он устанавливает значение null, что означает «Я ничего не указываю».

Во второй строке ключевое слово new используется для создания экземпляра (или создания ) объекту типа Integer и переменной указателя num присваивается этот объект. Теперь вы можете ссылаться на объект, используя оператор разыменования . (точка).

Exception, о котором вы просили, возникает, когда вы объявляете переменную, но не создавали объект. Если вы попытаетесь разыменовать num. Перед созданием объекта вы получите NullPointerException. В самых тривиальных случаях компилятор поймает проблему и сообщит вам, что «num не может быть инициализирован», но иногда вы пишете код, который непосредственно не создает объект.

Например, вы можете имеют следующий метод:

public void doSomething(SomeObject obj) {
   //do something to obj
}

В этом случае вы не создаете объект obj, скорее предполагая, что он был создан до вызова метода doSomething. К сожалению, этот метод можно вызвать следующим образом:

doSomething(null);

В этом случае obj имеет значение null. Если метод предназначен для того, чтобы что-то сделать для переданного объекта, целесообразно бросить NullPointerException, потому что это ошибка программиста, и программисту понадобится эта информация для целей отладки.

Альтернативно, там могут быть случаи, когда цель метода заключается не только в том, чтобы работать с переданным в объекте, и поэтому нулевой параметр может быть приемлемым. В этом случае вам нужно будет проверить нулевой параметр и вести себя по-другому. Вы также должны объяснить это в документации. Например, doSomething может быть записано как:

/**
  * @param obj An optional foo for ____. May be null, in which case 
  *  the result will be ____.
  */
public void doSomething(SomeObject obj) {
    if(obj != null) {
       //do something
    } else {
       //do something else
    }
}

Наконец, Как определить исключение & amp; причина использования Трассировки стека

12
задан Paul Dolphin 16 September 2008 в 12:37
поделиться

5 ответов

Вот другое решение, которое я просто сделал, видя, что я понимаю то, что Вы хотите сделать:

Вот Ваш ASCX / ASPX

    <asp:ListView ID="ListView1" runat="server" DataSourceID="MyDataSource" ItemPlaceholderID="itemPlaceHolder" OnDataBound="ListView1_DataBound">
        <LayoutTemplate>
            <table border="1">
                <tr>
                    <td>Name</td>
                    <td>Age</td>
                    <td runat="server" id="tdIsSuperCool">IsSuperCool</td>
                </tr>
                <asp:PlaceHolder ID="itemPlaceHolder" runat="server" />
            </table>
        </LayoutTemplate>
        <ItemTemplate>
            <tr>
                <td><%# Eval("Name") %></td>
                <td><%# Eval("Age") %></td>
                <td runat="server" id="myCol" visible='<%# (bool)Eval("IsSuperCool") %>'>true</td>
            </tr>
        </ItemTemplate>
    </asp:ListView>
    <asp:ObjectDataSource 
        ID="MyDataSource" 
        runat="server" 
        DataObjectTypeName="BusinessLogicLayer.Thing" 
        SelectMethod="SelectThings"
        TypeName="BusinessLogicLayer.MyObjectDataSource" />

Вот код позади

/// <summary>
/// Handles the DataBound event of the ListView1 control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
protected void ListView1_DataBound(object sender, EventArgs e)
{
    ListView1.FindControl("tdIsSuperCool").Visible = false;
}

Сделайте то, что Вы хотите в связанном с данными. Поскольку столбец является теперь runat сервером, и Вы обрабатываете DataBound управления, когда Вы делаете ListView1. FindControl ("tdIsSuperCool") Вы находитесь в шаблоне Layout так, чтобы работы как чемпион.

Поместите любую бизнес-логику, что Вы хотите управлять видимостью td, и Вы хороши.

19
ответ дан 2 December 2019 в 06:28
поделиться

ListView дает Вам полный контроль о том, как данные представляются клиенту. Вы указываете Шаблон Расположения и даете заполнителя, который будет, где каждый объект введен.

Вывод ниже даст Вам таблицу, и каждым объектом будет новая TR.

Заметьте использование runat ='server' и visible ='<%# %>'

<asp:ListView ID="ListView1" runat="server" DataSourceID="MyDataSource" ItemPlaceholderID="itemPlaceHolder">
    <LayoutTemplate>
        <table>
            <asp:PlaceHolder ID="itemPlaceHolder" runat="server" />
        </table>
    </LayoutTemplate>
    <ItemTemplate>
        <tr>
            <td runat="server" id="myCol" visible='<%# (bool)Eval("IsSuperCool") %>'>
                <%# Eval("SuperCoolIcon") %>
            </td>
            <td>
                <%# Eval("Name") %>
            </td>
            <td>
                <%# Eval("Age") %>
            </td>
        </tr>
    </ItemTemplate>
</asp:ListView>
1
ответ дан 2 December 2019 в 06:28
поделиться

Попробуйте Используя Панель, и можно включить ее / Прочь

 foreach (ListViewItem item in ListView1.Items)
 {
     ((Panel)item.FindControl("myPanel")).Visible= False;
 }
3
ответ дан 2 December 2019 в 06:28
поделиться

Можно всегда устанавливать ширину столбца на 0 (нуль), если Вы не находите лучший путь.

0
ответ дан 2 December 2019 в 06:28
поделиться

listview действительно не имеет понятия 'столбца', так как это предназначается только, чтобы быть, ну, в общем, списком.

Я собираюсь предположить, что Вы используете привязку данных для присоединения списка 'somethings' к ListView. Если это так, затем у Вас просто будет список объектов, и HTML в LayoutTemplate выберет, как те объекты отображены. Если бы Вы затем говорите о создании массива стиля таблицы столбцов и строк затем, возможно, DataGrid был бы лучшим выбором, так как это дает намного больше программного контроля определенных столбцов.

Может случиться так, что Вы надеетесь создать сервировку полностью через CSS, который является замечательным решением, если это просто в целях расположения. Однако Ваше требование для специфического сокрытия одного столбца указывает мне, что таблица лучше помещается для удовлетворения потребностям. Хорошо использовать таблицы для табличных данных... По моему скромному мнению...

Если действительно необходимо использовать ListView затем, Вы могли бы всегда пытаться связать против чего-то в Ваших данных, которые определяют, нужно ли элемент показать или нет, например:

style='display: <%#Eval("DisplayStyle") %>;'

Поместите этот код в элементе HTML, которым Вы хотите управлять (в LayoutTemplate). Затем в объекте Вы связываете с Вами, нуждался бы в свойстве 'DisplayStyle', которое было или установлено 'заблокироваться' или 'ни один'.

0
ответ дан 2 December 2019 в 06:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: