powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Проблема с делегатами
8 сообщений из 8, страница 1 из 1
Проблема с делегатами
    #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
Проблема с делегатами
    #37509678
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рекомендации с дружественного форумаПодумайте также над тем, чтобы описать решаемую Вами задачу целиком.
Возможно, что тот способ решения, который Вы стремитесь воплотить в жизнь, не является наилучшим, а лишь кажется Вам таковым.
...
Рейтинг: 0 / 0
Проблема с делегатами
    #37509699
DeViLsssss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Паганель,

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

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

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

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


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