Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Проблема с делегатами / 8 сообщений из 8, страница 1 из 1
02.11.2011, 22:13:20
    #37509646
DeViLsssss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с делегатами
Здравствуйте, уважаемые участники форума!
С недавнего времени начал изучать ASP.Net (C#).
Честно-книги читал и не одну.
Проблема в следующем.
Я научился использовать делегаты в WinForms.
Но в ASP.Net не могу сообразить как их правильно применить.
Поясню на примере:

Есть страница на которой контролом рисуется таблица и должна заполняться данными.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WA1._Default" %>
<%@ Register Assembly="WA1" Namespace="Tbl_Ctrl" TagPrefix="Tbl_Ctrl"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
...
                            <asp:Button ID="View_Btn" runat="server" Text="Показать" onclick="Make_Btn_Click" />
                        <Tbl_Ctrl:Tmp_Table runat="server" ID="Tmp_Table_Input"></Tbl_Ctrl:Tmp_Table>
...

Код обработчика кнопки:
Код: 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.
27.
28.
protected void View_Btn_Click(object sender, EventArgs e)
        {
            pgrds = new DataSet();
            pgrcmd = "SELECT \"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"14\",\"15\",\"16\",\"17\",\"18\",\"19\",\"20\",\"21\",\"22\",\"23\",\"24\" FROM \"Sv_Acts\".\"Acts\" WHERE \"COD_LPU\"=" + LPU_DDL0.SelectedValue + " and \"Month\"=" + M_beg_DDL0.SelectedValue + ";";
            pgrda = new OdbcDataAdapter(pgrcmd, pgrbd);
            pgrda.Fill(pgrds);
            CCol = pgrds.Tables[0].Columns.Count;
            RCol = pgrds.Tables[0].Rows.Count;
            if (RCol != 0)
            {
                FlFl1.Value = "0";
                for (int i = 0; i < RCol; i++)
                {
                    for (int j = 0; j < CCol; j++)
                    {
                        Tbl_Ctrl.Tmp_Table.OnChange(pgrds.Tables[0].Rows[i][j].ToString());
                    }
                }
            }
            else
            {
                FlFl1.Value = "1";
                for (int j = 0; j < CCol; j++)
                {
                    Tbl_Ctrl.Tmp_Table.OnChange(pgrds.Tables[0].Rows[i][j].ToString());
                }
          }
        }

Код контрола:
Код: 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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
using System;
using System.Web.UI;
namespace Tbl_Ctrl
{
    

    public class Tmp_Table : Control, IPostBackEventHandler

    {
        public string[] TblVls;
        protected override void Render(HtmlTextWriter writer)
        {
            string[] tblhdr = new string[24] {"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24",};
            writer.RenderBeginTag(HtmlTextWriterTag.Table);
            for (int i = 0; i < 24; i++)
            {
                TblVls = new string[24];
                writer.RenderBeginTag(HtmlTextWriterTag.Tr);
                    writer.RenderBeginTag(HtmlTextWriterTag.Td);
                        writer.RenderBeginTag(HtmlTextWriterTag.Label);
                            writer.WriteEncodedText(tblhdr[i].ToString());
                        writer.RenderEndTag(); //Label
                    writer.RenderEndTag(); //Td
                    writer.RenderBeginTag(HtmlTextWriterTag.Td);
                        writer.AddAttribute("Type", "text");
                        writer.AddAttribute("name", "Inp_" + i);
                        writer.AddAttribute("value", TblVls[i]);
                        writer.AddAttribute("style", "width:120px");
                        writer.RenderBeginTag(HtmlTextWriterTag.Input);
                        writer.RenderEndTag(); //Input
                    writer.RenderEndTag(); //Td
            writer.RenderEndTag(); //Tr
            }
            writer.RenderEndTag(); //Table
    
            base.Render(writer);
        }
        public delegate void OnChangeEH(object sender, EventArgs args);
        public static string OnChange(string str)
        {
            return str;
        }
        public void RaisePostBackEvent(string eventArgument)
        {
            TblVls = new string[24];
            for (int i = 0; i < 24; i++)
            {
                TblVls[i] = OnChange(eventArgument);
            }
        }
    }
}

Как правильно сделать так, чтобы значения из SQL-запроса попали в Input type="text" строящейся таблицы?
...
Рейтинг: 0 / 0
02.11.2011, 22:47:51
    #37509678
Паганель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с делегатами
Рекомендации с дружественного форумаПодумайте также над тем, чтобы описать решаемую Вами задачу целиком.
Возможно, что тот способ решения, который Вы стремитесь воплотить в жизнь, не является наилучшим, а лишь кажется Вам таковым.
...
Рейтинг: 0 / 0
02.11.2011, 23:09:12
    #37509699
DeViLsssss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с делегатами
Паганель,

Задача такова.
С помощью контрола, рисующего таблицу с полями для заполнения, реализовать вывод данных из таблицы БД и запись измененных данных.
Вторая часть задачи реализована. Это просто.
А вот при решение первой части задачи я застрял на выводе данных из результата запроса в поля для заполнения уже существующих в таблице данных (Поля для заполнения типа INPUT TYPE="TEXT", и у каждого определен ID).
Если реализовывать напрямую (задавать переменную TblVls, и пытаться Request-ом обращаться к странице, то у меня выводится значение последнего поля (в принципе понятно почему), а если заполнять массив TblVls[], то при обращении к нему возникает ошибка значение объекта TblVls[i] = null. Необходимо его определить. А это можно сделать только с помощью делегата, насколько я понимаю.
...
Рейтинг: 0 / 0
02.11.2011, 23:24:35
    #37509714
Паганель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с делегатами
DeViLsssssреализовать вывод данных из таблицы БД и запись измененных данныхпочему бы не использовать для этого GridView вместо самописного контрола?
...
Рейтинг: 0 / 0
02.11.2011, 23:52:48
    #37509749
DeViLsssss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с делегатами
Паганель,
Задача того требует.
Препод дурной...
...
Рейтинг: 0 / 0
02.11.2011, 23:59:43
    #37509760
Паганель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с делегатами
я б дал ему взятку и освободил бы время для чего-то полезного
...
Рейтинг: 0 / 0
03.11.2011, 00:47:35
    #37509804
Starlex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с делегатами
DeViLsssssПаганель,
а если заполнять массив TblVls[], то при обращении к нему возникает ошибка значение объекта TblVls[i] = null. Необходимо его определить. А это можно сделать только с помощью делегата, насколько я понимаю.

Зачем делегаты? Просто сделайте

Код: plaintext
TblVls = new string[24];

и заполните TblVls. И почему у вас в Render стоит TblVls = new string[24]; да еще в цикле? Вы же всегда заполняете таблицу из пустого массива.
...
Рейтинг: 0 / 0
03.11.2011, 05:37:53
    #37509879
DeViLsssss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с делегатами
Starlex,
Спасибо! Все получилось!
Насчет делегата поковыряюсь, если что придумаю, напишу (все равно надо разобраться как его использовать).
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Проблема с делегатами / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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