Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Боковая подпись к GridView / 25 сообщений из 81, страница 1 из 4
04.02.2013, 01:35
    #38135617
The_Immortal
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Боковая подпись к GridView
Не могу додумать как реализовать следующее.

Таблица в БД:
IdProductNamePriceAmount1 Монитор 5000 52 Видеокарта 7000 33 ЖД 3000 0... ... ... ...

Необходимо выводить такой GridView:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
       
 ---------------------
| Монитор    | 5000  |    
 ---------------------      
| Видеокарта | 7000  |
 ---------------------
| ЖД         | 3000  |  Отсутствует       
 ---------------------

Т.е. необходимо:

1. Убрать шапку с GridView.
2. Каким-то образом анализировать количество товара и при его отсутствии выводить сообщение "Отсутствует".
3. Позиционировать надпись "Отсутствует" в продолжение строки GridView. При этом надпись не должна быть обрамлена бордерами.
4. Менять шрифт и его цвет у данной надписи.

GridView находится внутри Repeater'а.

Думал полная фигня, но на практике так не показалось :)

Итак:

1. ShowHeader.
2. Решил это делать непосредственно через запрос с условием:
Код: sql
1.
SELECT ProductName, Price, CASE WHEN Amount = 0 THEN 'Отсутсвует' END As Availability FROM Products


3. Вопрос с позиционированием решается автоматически. Бордеры в принципе догадываюсь как убирать.
4. По поводу цвета шрифта для колонки тоже нагуглю.

Вопрос : попроще эту плевую задачку как-нибудь решить можно? :-)
...
Рейтинг: 0 / 0
04.02.2013, 02:29
    #38135622
The_Immortal
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Боковая подпись к GridView
The_Immortal3. Позиционировать надпись "Отсутствует" в продолжение строки GridView. При этом надпись не должна быть обрамлена бордерами.

Не могу все-таки никак убрать это долбанную рамку :(

Пробовал вот так:
Код: c#
1.
2.
3.
4.
5.
        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            e.Row.Cells[2].BorderWidth = 0;
        //  e.Row.Cells[2].Attributes["style"] = "border-right:0"; // и вот так - правая граница не убирается
        }



- нифига не меняется...
...
Рейтинг: 0 / 0
04.02.2013, 09:42
    #38135717
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Боковая подпись к GridView
GridView Examples for ASP.NET 2.0: Formatting the GridView
Код: xml
1.
2.
3.
<asp:BoundField DataField="Availability">
    <ItemStyle CssClass="availability-cell"></ItemStyle>
</asp:BoundField>
...
Рейтинг: 0 / 0
04.02.2013, 09:56
    #38135728
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Боковая подпись к GridView
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<asp:GridView runat="server" ID="grid" ShowHeader="false" AutoGenerateColumns="false">
    <Columns>
        <asp:BoundField DataField="Id" />
        <asp:BoundField DataField="ProductName" />
        <asp:BoundField DataField="Price" />
        <asp:TemplateField>
            <ItemTemplate>
                <%# Eval("AmountText") != null ? string.Format("<span style='color:red'>{0}</span>", Eval("AmountText")) : null %>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>



Default
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
public partial class _Default : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            grid.DataSource = GetProducts();
            grid.DataBind();
        }
    }

    IEnumerable<ProductModel> GetProducts()
    {
        var products = new [] { 
            new ProductModel{ Id = 1, ProductName = "Монитор", Price = 5000, Amount = 5 },
            new ProductModel{ Id = 2, ProductName = "Видеокарта", Price = 7000, Amount = 3 },
            new ProductModel{ Id = 3, ProductName = "ЖД", Price = 3000, Amount = 0 },
        };
        return products;
    }
}

public class ProductModel
{
    public int Id { get; set; }
    public string ProductName { get; set; }
    public decimal Price { get; set; }
    public int Amount { get; set; }
    public string AmountText 
    { 
        get
        {
            return Amount == 0 ? "Отсутствует" : null;
        } 
    }
}



P.S. Анализ на SQL делать не стоит, к БД нужно обращаться только за исходными данными для расчета, никаких "CASE WHEN" (исключения составляют только запросы для оптимизации, но это не твой случай). Анализ делать в моделе (логика), раскрашивать в представлении (желательно).
...
Рейтинг: 0 / 0
04.02.2013, 10:14
    #38135745
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Боковая подпись к GridView
МСУ, зачем AmountText проверять на null? Пустая красная надпись очень заметная?
...
Рейтинг: 0 / 0
04.02.2013, 10:18
    #38135749
The_Immortal
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Боковая подпись к GridView
skyANA,
МСУ,

Как я выше писал, GridView находится внутри Repeater'а. Заполняется он в зависимости от текущего значения определенного поля в Repeater'е:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            SqlConnection myConnection = new SqlConnection();
            myConnection.ConnectionString = WebConfigurationManager.ConnectionStrings["MainConnectionString"].ConnectionString;
            SqlCommand myCommand = new SqlCommand();

            myCommand.CommandType = CommandType.Text;
            myCommand.CommandText = "SELECT ProductName, Price, CASE WHEN Amount = 0 THEN 'Отсутсвует' END As Availability FROM Products WHERE Id = " + DataBinder.Eval(e.Item.DataItem, "Id");
            myCommand.Connection = myConnection;

            SqlDataAdapter da = new SqlDataAdapter(myCommand.CommandText, myConnection);
            DataTable dt = new DataTable();
            da.Fill(dt);

            GridView gv = (GridView)e.Item.FindControl("GridView1");
            gv.DataSource = dt;
            gv.DataBind();
        }



Соответственно, в aspx'е у меня никаких шаблонов быть не может (к сожалению), т.к. все данные формируются в код бехайнде. Если я буду параллельно юзать и темплейты, то столбцы в гриде будут дублироваться :-(
...
Рейтинг: 0 / 0
04.02.2013, 10:22
    #38135751
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Боковая подпись к GridView
skyANAМСУ, зачем AmountText проверять на null? Пустая красная надпись очень заметная?
Ну чтобы не генерить на клиенте лишние пустые спаны :)

The_Immortalстолбцы в гриде будут дублироваться :-(
AutoGenerateColumns?
...
Рейтинг: 0 / 0
04.02.2013, 10:26
    #38135762
The_Immortal
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Боковая подпись к GridView
МСУ, упс, не заметил. Простите :)

Спасибо огромнейшее! Пойду пробовать :)
...
Рейтинг: 0 / 0
04.02.2013, 10:53
    #38135793
The_Immortal
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Боковая подпись к GridView
МСУ, кстати, а не подскажите, как по-правильному заполнять GridView программно? Я делаю это через DataTable, можно еще через DataSet - один фиг.
А как надо? :)
...
Рейтинг: 0 / 0
04.02.2013, 10:56
    #38135802
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Боковая подпись к GridView
The_ImmortalМСУ, кстати, а не подскажите, как по-правильному заполнять GridView программно? Я делаю это через DataTable, можно еще через DataSet - один фиг.
А как надо? :)
Датасеты с дататейблами выбрось на свалку, только типизированный подход. Кури ORM, Linq, IEnumerable, IQueryable, yield.
...
Рейтинг: 0 / 0
04.02.2013, 11:20
    #38135848
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Боковая подпись к GridView
МСУskyANAМСУ, зачем AmountText проверять на null? Пустая красная надпись очень заметная?
Ну чтобы не генерить на клиенте лишние пустые спаны :)
Для любителей пораспихать вообще всю логику UI в модель представления посвящается :)

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<asp:GridView runat="server" ID="grid" ShowHeader="false" AutoGenerateColumns="false">
    <Columns>
        <asp:BoundField DataField="Id" />
        <asp:BoundField DataField="ProductName" />
        <asp:BoundField DataField="Price" />
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Label runat="server" Visible='<%# Eval("AmountVisible") %>' Text='<%# Eval("AmountText") %>' ForeColor="Red" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>



ProductModel
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
public class ProductModel
{
	public int Id { get; set; }
    public string ProductName { get; set; }
    public decimal Price { get; set; }
    public int Amount { get; set; }

    public string AmountText 
    { 
        get
        {
            return AmountVisible ? "Отсутствует" : null;
        } 
    }

    public bool AmountVisible 
    { 
        get
        {
            return Amount == 0;
        } 
    }        
}



выхлоп
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<table>
        <tr>
            <td>1</td>
            <td>Монитор</td>
            <td>5000</td>
            <td></td>
        </tr>
        <tr>
            <td>2</td>
            <td>Видеокарта</td>
            <td>7000</td>
            <td></td>
        </tr>
        <tr>
            <td>3</td>
            <td>ЖД</td>
            <td>3000</td>
            <td>
                <span style="color: Red;">Отсутствует</span>
            </td>
        </tr>
    </table>

...
Рейтинг: 0 / 0
04.02.2013, 11:44
    #38135895
Парамон
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Боковая подпись к GridView
МСУНу чтобы не генерить на клиенте лишние пустые спаны :)

Там совсем не нужны эти спаны, и тем более не зашивать стили в разметку.
ItemStyle-CssClass="note"
...
Рейтинг: 0 / 0
04.02.2013, 12:29
    #38136041
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Боковая подпись к GridView
МСУМСУпропущено...

Ну чтобы не генерить на клиенте лишние пустые спаны :)
Для любителей пораспихать вообще всю логику UI в модель представления посвящается :)

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<asp:GridView runat="server" ID="grid" ShowHeader="false" AutoGenerateColumns="false">
    <Columns>
        <asp:BoundField DataField="Id" />
        <asp:BoundField DataField="ProductName" />
        <asp:BoundField DataField="Price" />
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Label runat="server" Visible='<%# Eval("AmountVisible") %>' Text='<%# Eval("AmountText") %>' ForeColor="Red" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>



ProductModel
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
public class ProductModel
{
	public int Id { get; set; }
    public string ProductName { get; set; }
    public decimal Price { get; set; }
    public int Amount { get; set; }

    public string AmountText 
    { 
        get
        {
            return AmountVisible ? "Отсутствует" : null;
        } 
    }

    public bool AmountVisible 
    { 
        get
        {
            return Amount == 0;
        } 
    }        
}



выхлоп
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<table>
        <tr>
            <td>1</td>
            <td>Монитор</td>
            <td>5000</td>
            <td></td>
        </tr>
        <tr>
            <td>2</td>
            <td>Видеокарта</td>
            <td>7000</td>
            <td></td>
        </tr>
        <tr>
            <td>3</td>
            <td>ЖД</td>
            <td>3000</td>
            <td>
                <span style="color: Red;">Отсутствует</span>
            </td>
        </tr>
    </table>

МСУ, хватит говнокод постить. ТСу ещё и рамку для последней колонки убрать нужно.

Ещё раз:
Код: xml
1.
<ItemStyle CssClass="availability-cell"></ItemStyle>
...
Рейтинг: 0 / 0
04.02.2013, 12:34
    #38136058
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Боковая подпись к GridView
The_ImmortalskyANA,
МСУ,

Как я выше писал, GridView находится внутри Repeater'а. Заполняется он в зависимости от текущего значения определенного поля в Repeater'е:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            SqlConnection myConnection = new SqlConnection();
            myConnection.ConnectionString = WebConfigurationManager.ConnectionStrings["MainConnectionString"].ConnectionString;
            SqlCommand myCommand = new SqlCommand();

            myCommand.CommandType = CommandType.Text;
            myCommand.CommandText = "SELECT ProductName, Price, CASE WHEN Amount = 0 THEN 'Отсутсвует' END As Availability FROM Products WHERE Id = " + DataBinder.Eval(e.Item.DataItem, "Id");
            myCommand.Connection = myConnection;

            SqlDataAdapter da = new SqlDataAdapter(myCommand.CommandText, myConnection);
            DataTable dt = new DataTable();
            da.Fill(dt);

            GridView gv = (GridView)e.Item.FindControl("GridView1");
            gv.DataSource = dt;
            gv.DataBind();
        }



Соответственно, в aspx'е у меня никаких шаблонов быть не может (к сожалению), т.к. все данные формируются в код бехайнде. Если я буду параллельно юзать и темплейты, то столбцы в гриде будут дублироваться :-(Вместо того, чтобы опираться на свою интуицую и метод тыка, почитали бы лучше MSDN.

P.S.: Вы в команде работаете, или фрилансер?
...
Рейтинг: 0 / 0
04.02.2013, 12:39
    #38136065
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Боковая подпись к GridView
skyANAМСУ, хватит говнокод постить. ТСу ещё и рамку для последней колонки убрать нужно.
Гавнокод предложил ты, пустые спаны отдавать на клиента. А класс прикрутить или вкорячить стиль по месту - дело десятое, особого ума для этого не требуется.
...
Рейтинг: 0 / 0
04.02.2013, 12:45
    #38136080
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Боковая подпись к GridView
МСУskyANAМСУ, хватит говнокод постить. ТСу ещё и рамку для последней колонки убрать нужно.
Гавнокод предложил ты, пустые спаны отдавать на клиента. А класс прикрутить или вкорячить стиль по месту - дело десятое, особого ума для этого не требуется.Покажи, где я предлагал пустые спаны? Я лишь твоё решение потроллил.
Именно оно и приводило к пустым спанам со style='border:none', потому как ты не обратил внимание на то, что нужно ещё и рамку убрать.
...
Рейтинг: 0 / 0
04.02.2013, 12:52
    #38136095
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Боковая подпись к GridView
skyANAПокажи, где я предлагал пустые спаны? Я лишь твоё решение потроллил.
Вот тут 13870623

skyANAИменно оно и приводило к пустым спанам со style='border:none', потому как ты не обратил внимание на то, что нужно ещё и рамку убрать.
Оно не приводило к пустым спанам, т.к. в ItemTemplate null, учи матчасть.
...
Рейтинг: 0 / 0
04.02.2013, 13:00
    #38136111
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Боковая подпись к GridView
МСУskyANAПокажи, где я предлагал пустые спаны? Я лишь твоё решение потроллил.
Вот тут 13870623 А, извини, что не сказал тебе сразу, что решение со спанами - говнокод изначально. И проверка на null его нисколько не красит.

МСУskyANAИменно оно и приводило к пустым спанам со style='border:none', потому как ты не обратил внимание на то, что нужно ещё и рамку убрать.
Оно не приводило к пустым спанам, т.к. в ItemTemplate null, учи матчасть.Нах мне учить матчасть по говнокодингу?
И ты это, как рамку-то будешь убирать в своём решении?
...
Рейтинг: 0 / 0
04.02.2013, 13:09
    #38136136
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Боковая подпись к GridView
skyANAА, извини, что не сказал тебе сразу, что решение со спанами - говнокод изначально. И проверка на null его нисколько не красит.
К сожалению, ты не привел ни одного варианта решения (я привел два), кроме как начал пускать пену в сторону класса стилей на один красный цвет. Ты лучший архитехтор негавнокодных решений, браво!

skyANAНах мне учить матчасть по говнокодингу?
Отлично, то есть матчать ты не знаешь, но про гавнокод поговорить ты горазд? Чудненько :)

skyANAИ ты это, как рамку-то будешь убирать в своём решении?
А ты?
...
Рейтинг: 0 / 0
04.02.2013, 13:27
    #38136180
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Боковая подпись к GridView
МСУ, третий пост в топике посмотри, чудило, прежде чем фекалиями фонтанировать
...
Рейтинг: 0 / 0
04.02.2013, 13:30
    #38136184
The_Immortal
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Боковая подпись к GridView
skyANA,
skyANAP.S.: Вы в команде работаете, или фрилансер?
Не... Не дай Бог такому диблойду, как мне, работать в команде или предоставлять услуги фриланса :-) Я скорее любитель. На данный момент помогаю другу с проектом.


В общем, заколебался я с этой рамкой. Не убирается она - хоть убейся!

Пробовал и как Вы указали:
Код: html
1.
2.
3.
<asp:BoundField DataField="Availability">
    <ItemStyle CssClass="availability-cell"></ItemStyle>
</asp:BoundField>



Код: css
1.
2.
3.
4.
.availability-cell
{
    border-style: none;
}    



И вот так:

Код: html
1.
2.
3.
<asp:BoundField DataField="Availability">
    <ItemStyle BorderStyle="None"></ItemStyle>
</asp:BoundField>



Все равно не уходит...
...
Рейтинг: 0 / 0
04.02.2013, 13:43
    #38136205
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Боковая подпись к GridView
skyANAМСУ, третий пост в топике посмотри, чудило, прежде чем фекалиями фонтанировать
Ну ты дятел, я тебе о стилях уже каоторый пост пишу. Ты просто неимоверная кладезь таланта
...
Рейтинг: 0 / 0
04.02.2013, 13:46
    #38136210
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Боковая подпись к GridView
The_Immortal, другу значит помогаете, ясно. Ему быстро всё надо что-ли, нет времени книжку почитать?

Скриншот приложите, чтобы понятно было, какая рамка остаётся: у ячейки, строки или таблицы. И браузер скажите какой, а то были случаи танцев с рамками GridView в различных браузерах.
...
Рейтинг: 0 / 0
04.02.2013, 13:50
    #38136217
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Боковая подпись к GridView
МСУskyANAМСУ, третий пост в топике посмотри, чудило, прежде чем фекалиями фонтанировать
Ну ты дятел, я тебе о стилях уже каоторый пост пишу. Ты просто неимоверная кладезь таланта Ну ну... Сначала написал два поста говнокода, а потом глубокомысленно заявил: "А класс прикрутить или вкорячить стиль по месту - дело десятое, особого ума для этого не требуется".
Да ты професси А нал, что тут ещё скажешь.
...
Рейтинг: 0 / 0
04.02.2013, 14:13
    #38136269
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Боковая подпись к GridView
skyANAНу ну... Сначала написал два поста говнокода, а потом глубокомысленно заявил: "А класс прикрутить или вкорячить стиль по месту - дело десятое, особого ума для этого не требуется".
Как два поста относятся к классу? В друх постах помимо класса решались и другие задачи. Посему, у тебя как всегда холостой выперд.

skyANAДа ты професси А нал, что тут ещё скажешь.
Чего не скажешь о тебе
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Боковая подпись к GridView / 25 сообщений из 81, страница 1 из 4
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]