Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / SqlDataReader и Chart - заполнение DataBindXY / 14 сообщений из 14, страница 1 из 1
13.11.2011, 13:50:52
    #37524171
KamskyPaul
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SqlDataReader и Chart - заполнение DataBindXY
Есть следующий код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
            string ConnectionString = WebConfigurationManager.ConnectionStrings["Report"].ConnectionString;
            SqlConnection con = new SqlConnection(ConnectionString);
            using (con)
            {
                con.Open();
                SqlCommand cmd = new SqlCommand("sp_GetDayCounters", con);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@dBeg", SqlDbType.DateTime);
                cmd.Parameters["@dBeg"].Value = ReportBegin;
                cmd.Parameters.Add("@dEnd", SqlDbType.DateTime);
                cmd.Parameters["@dEnd"].Value = ReportEnd;
                SqlDataReader reader = cmd.ExecuteReader();
                BarChart.Series["UUG"].Points.DataBindXY(reader, "Date", reader, "UKPG_UUG");
                BarChart.Series["UUG"].YAxisType = System.Web.UI.DataVisualization.Charting.AxisType.Primary;
//                reader.Close();
//                reader = cmd.ExecuteReader();
                BarChart.Series["ASN"].Points.DataBindXY(reader, "Date", reader, "ASN_Result");
                BarChart.Series["ASN"].YAxisType = System.Web.UI.DataVisualization.Charting.AxisType.Secondary;
                reader.Close();
            }


Хранимая процедура возвращает несколько столбцов данных, мне в Chart нужно вывести только два из них - UKPG_UUG и ASN_Result. Series UUG заполняется, Series ASN - нет. Если раскомментарить строки
Код: plaintext
1.
2.
//                reader.Close();
//                reader = cmd.ExecuteReader();
- заполняются обе Series. Но вызывать два раза ХП - не красиво и не хорошо :)
Какова логика работы DataBindXY и SqlDataReader? Почему так получается?
...
Рейтинг: 0 / 0
13.11.2011, 15:43:49
    #37524237
Паганель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SqlDataReader и Chart - заполнение DataBindXY
Такое впечатление что после первого бинда ридер весь прочитывается
и за вторым биндом уже выглядит пустым

Попробуйте вынести объявление серий в разметку (т.е. в файл aspx),
а бинд DataSource делать в коде на весь график, а не на отдельные серии
...
Рейтинг: 0 / 0
13.11.2011, 16:04:20
    #37524258
KamskyPaul
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SqlDataReader и Chart - заполнение DataBindXY
Паганель,
Объявления серий в ASPX - файле
Код: plaintext
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.
    <asp:Chart ID="BarChart" runat="server" Height="508px" Width="1020px" 
        onload="BarChart_Load">

        <series>
            <asp:Series ChartType="Line" Name="UUG" Legend="Legend" 
                LegendText="Газ УУГ, м3/сут" YAxisType="Secondary">
            </asp:Series>
            <asp:Series ChartArea="ChartArea1" Legend="Legend" 
                LegendText="Конденсат,  л/сут" Name="ASN" ChartType="Line">
            </asp:Series>
        </series>
        <chartareas>
            <asp:ChartArea Name="ChartArea1">
                <AxisY Title="Газ, м3">
                </AxisY>
                <AxisY2 Title="Конд, л">
                </AxisY2>
            </asp:ChartArea>
        </chartareas>
        <Legends>
            <asp:Legend DockedToChartArea="ChartArea1" ItemColumnSeparator="Line" 
                Name="Legend">
            </asp:Legend>
        </Legends>
    </asp:Chart>


Если делать так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
            string ConnectionString = WebConfigurationManager.ConnectionStrings["Report"].ConnectionString;
            SqlConnection con = new SqlConnection(ConnectionString);
            using (con)
            {
                con.Open();
                SqlCommand cmd = new SqlCommand("sp_GetDayCounters", con);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@dBeg", SqlDbType.DateTime);
                cmd.Parameters["@dBeg"].Value = ReportBegin;
                cmd.Parameters.Add("@dEnd", SqlDbType.DateTime);
                cmd.Parameters["@dEnd"].Value = ReportEnd;
                SqlDataReader reader = cmd.ExecuteReader();
                BarChart.DataBindTable(reader,"Date");
                reader.Close();
            }


то выводятся все столбцы, возвращаемые хранимой процедурой. Можно, конечно, пройтись самому по сериям и ненужные удалить... Некрасиво как то оно :)
...
Рейтинг: 0 / 0
13.11.2011, 16:42:16
    #37524290
Паганель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SqlDataReader и Chart - заполнение DataBindXY
YValueMembers попробуйте заюзать
...
Рейтинг: 0 / 0
13.11.2011, 17:17:37
    #37524320
KamskyPaul
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SqlDataReader и Chart - заполнение DataBindXY
Паганель, Спасибо!
Заработало:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
            string ConnectionString = WebConfigurationManager.ConnectionStrings["Report"].ConnectionString;
            SqlConnection con = new SqlConnection(ConnectionString);
            using (con)
            {
               con.Open();
               SqlCommand cmd = new SqlCommand("sp_GetDayCounters", con);
               cmd.CommandType = CommandType.StoredProcedure;
               cmd.Parameters.Add("@dBeg", SqlDbType.DateTime);
               cmd.Parameters["@dBeg"].Value = ReportBegin;
               cmd.Parameters.Add("@dEnd", SqlDbType.DateTime);
               cmd.Parameters["@dEnd"].Value = ReportEnd;
               SqlDataReader reader = cmd.ExecuteReader();
               BarChart.DataSource = reader;
               BarChart.Series[0].YValueMembers = "UKPG_UUG";
               BarChart.Series[1].YValueMembers = "ASN_Result";
               BarChart.DataBind();
                ...
                reader.Close();
            }

...
Рейтинг: 0 / 0
14.11.2011, 07:57:19
    #37524850
KamskyPaul
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SqlDataReader и Chart - заполнение DataBindXY
и чтоб не плодить тем: как красиво при загрузке страницы сделать Chart по ширине окна браузера? Проценты его свойство Width не понимает..
...
Рейтинг: 0 / 0
14.11.2011, 11:21:12
    #37525056
Паганель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SqlDataReader и Chart - заполнение DataBindXY
Ну а сами Вы как думаете? Вы разве не видели, какой html получается? Там же <img>
...
Рейтинг: 0 / 0
14.11.2011, 13:08:22
    #37525316
KamskyPaul
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SqlDataReader и Chart - заполнение DataBindXY
Паганель,
Ну вот как бы и хочется, чтобы этот img был во всю ширину окна
...
Рейтинг: 0 / 0
14.11.2011, 13:13:15
    #37525330
Паганель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SqlDataReader и Chart - заполнение DataBindXY
А другие img Вы во всю ширину окна взялись бы масштабировать?
Фотографии, например?
А что делать, если юзер меняет мышкой ширину окна? Подгонять?
...
Рейтинг: 0 / 0
14.11.2011, 13:23:36
    #37525361
KamskyPaul
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SqlDataReader и Chart - заполнение DataBindXY
Паганель,

ну img и chart - все-таки отличаются. Chart , по-моему, генерирует собственно img при загрузке страницы. Вот и хочется, чтоб Img сгенерировался в размеру окна..
...
Рейтинг: 0 / 0
14.11.2011, 13:33:51
    #37525388
Паганель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SqlDataReader и Chart - заполнение DataBindXY
Ну так как бы Вы с фотографией поступили?
Хранятся у Вас, допустим на сервере фотки большого размера,
а пользователю нужно показывать по ширине окна.
Взялись бы Вы реализовать такую задачу?
...
Рейтинг: 0 / 0
14.11.2011, 14:08:12
    #37525478
KamskyPaul
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SqlDataReader и Chart - заполнение DataBindXY
Паганель,
Позвольте с Вами не согласиться.
Все-таки для Chart можно сделать так:
Код: plaintext
1.
2.
3.
4.
5.
protected void Page_Load(object sender, EventArgs e)
{
......
Chart.Width = Unit.Pixel(600);
}
а можно написать:
Код: plaintext
1.
2.
3.
4.
5.
protected void Page_Load(object sender, EventArgs e)
{
......
Chart.Width = Unit.Pixel(1600);
}
и результирующие img будут соответствующего размера. Вот и хочется как то узнать клиентское разрешение, чтоб вместо 600 или 1600 подставить нужное.
...
Рейтинг: 0 / 0
14.11.2011, 14:13:49
    #37525490
Паганель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SqlDataReader и Chart - заполнение DataBindXY
узнать-то можно
1) изначально грузим страницу без графика
2) на $(document).ready узнаем что-то типа $(window).width()
3) там же посредством ajax получаем картинку по url, содержащему этот width
4) получив - подставляем в нужное место

но что делать когда юзер окно браузера расширяет/сужает ?
...
Рейтинг: 0 / 0
14.11.2011, 14:27:48
    #37525529
KamskyPaul
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SqlDataReader и Chart - заполнение DataBindXY
Паганель,

авторно что делать когда юзер окно браузера расширяет/сужает ?
Ну тогда хорошо бы узнать ширину экрана, а не браузера. Вывести chart шириной чуть меньше экрана, а дальше - дело пользователя. Хочет - сужает окно браузера, хочет - расширяет :)
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / SqlDataReader и Chart - заполнение DataBindXY / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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