Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ASP.NET Новый топик    Ответить
 FindControl GridView  [new]
Robb
Member

Откуда: там и тут
Сообщений: 949
Делаю так.

public class GridViewTemplate : ITemplate
{
private DataControlRowType templateType;
private string columnName;

public GridViewTemplate(DataControlRowType type, string colname)
{
templateType = type;
columnName = colname;
}

public void InstantiateIn(System.Web.UI.Control container)
{
switch (templateType)
{
case DataControlRowType.Header:
Literal lc = new Literal();
lc.Text = columnName;
container.Controls.Add(lc);
break;
case DataControlRowType.DataRow:
// Create the controls to put in a data row
// section and set their properties.
CheckBox chb = new CheckBox();
chb.ID = "chbx";
container.Controls.Add(chb);
break;
default:
break;
}
}
}


public partial class Tester : System.Web.UI.Page
{

protected void Go_Click(object sender, EventArgs e)
{
string connectionString =
ConfigurationManager.ConnectionStrings["SANDBOXConnectionString"].ConnectionString;
SqlConnection con = new SqlConnection(connectionString);
SqlDataAdapter adapter = new SqlDataAdapter("select * from SANDBOX.dbo.TestTable", con);
DataSet ds = new DataSet();
adapter.Fill(ds);
GridView1.DataSource = ds.Tables[0];
AddChecker();
GridView1.DataBind();

con.Close();

}

protected void AddChecker()
{
TemplateField check = new TemplateField();
check.HeaderText = "Selected";
check.ItemTemplate = new GridViewTemplate(DataControlRowType.DataRow, "Selector");
check.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, "Selector");
GridView1.Columns.Add(check);
}

protected void done_Click(object sender, EventArgs e)
{
foreach (GridViewRow gvr in this.GridView1.Rows)
{
CheckBox chb = (CheckBox)gvr.FindControl("chbx");

if (((CheckBox)gvr.FindControl("chb")).Checked == true)
{
// do something()
}
}
}





Не понимаю почему не находится контрол ID chbx в IF

????
7 фев 10, 14:51    [8307419]     Ответить | Цитировать Сообщить модератору
 Re: FindControl GridView  [new]
Robb
Member

Откуда: там и тут
Сообщений: 949
Up

До сих пор не получается найти котрол в строке при динамическом добавлении чекбокса.

Кто знает, намекните.
8 фев 10, 18:54    [8313551]     Ответить | Цитировать Сообщить модератору
 Re: FindControl GridView  [new]
МСУ
Member [заблокирован]

Откуда: http://codearticles.ru
Сообщений: 31089
Научитесь код оформлять должным образом.
8 фев 10, 19:51    [8313722]     Ответить | Цитировать Сообщить модератору
 Re: FindControl GridView  [new]
Robb
Member

Откуда: там и тут
Сообщений: 949
МСУ,

по теме можно? без нравоучений. Ok?
8 фев 10, 20:00    [8313754]     Ответить | Цитировать Сообщить модератору
 Re: FindControl GridView  [new]
ShSerge
Member

Откуда: ʚонɔ dиw
Сообщений: 24853
Robb
МСУ,

по теме можно? без нравоучений. Ok?

Давайте, всё-таки с нравоучениями. Оформите по человечески, в тэги src возьмите.
8 фев 10, 20:14    [8313801]     Ответить | Цитировать Сообщить модератору
 Re: FindControl GridView  [new]
Robb
Member

Откуда: там и тут
Сообщений: 949
public class GridViewTemplate : ITemplate
{
private DataControlRowType templateType;
private string columnName;

public GridViewTemplate(DataControlRowType type, string colname)
{
templateType = type;
columnName = colname;
}

public void InstantiateIn(System.Web.UI.Control container)
{
switch (templateType)
{
case DataControlRowType.Header:
Literal lc = new Literal();
lc.Text = columnName;
container.Controls.Add(lc);
break;
case DataControlRowType.DataRow:
// Create the controls to put in a data row
// section and set their properties.
CheckBox chb = new CheckBox();
chb.ID = "chbx";
container.Controls.Add(chb);
break;
default:
break;
}
}
}


public partial class Tester : System.Web.UI.Page
{

protected void Go_Click(object sender, EventArgs e)
{
string connectionString =
ConfigurationManager.ConnectionStrings["SANDBOXConnectionString"].ConnectionString;
SqlConnection con = new SqlConnection(connectionString);
SqlDataAdapter adapter = new SqlDataAdapter("select * from SANDBOX.dbo.TestTable", con);
DataSet ds = new DataSet();
adapter.Fill(ds);
GridView1.DataSource = ds.Tables[0];
AddChecker();
GridView1.DataBind();

con.Close();

}

protected void AddChecker()
{
TemplateField check = new TemplateField();
check.HeaderText = "Selected";
check.ItemTemplate = new GridViewTemplate(DataControlRowType.DataRow, "Selector");
check.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, "Selector");
GridView1.Columns.Add(check);
}

protected void done_Click(object sender, EventArgs e)
{
foreach (GridViewRow gvr in this.GridView1.Rows)
{
CheckBox chb = (CheckBox)gvr.FindControl("chbx");

if (((CheckBox)gvr.FindControl("chb")).Checked == true)
{
// do something()
}
}
}


Тут скорее проблема в том что ID контрола не присваивается в case DataControlRowType.DataRow:

либо как-то сбрасывается что-ли.. хз.
8 фев 10, 20:27    [8313841]     Ответить | Цитировать Сообщить модератору
 Re: FindControl GridView  [new]
Robb
Member

Откуда: там и тут
Сообщений: 949
public class GridViewTemplate : ITemplate
{
    private DataControlRowType templateType;
    private string columnName;

    public GridViewTemplate(DataControlRowType type, string colname)
    {
        templateType = type;
        columnName = colname;
    }

    public void InstantiateIn(System.Web.UI.Control container)
    {
        switch (templateType)
        {
            case DataControlRowType.Header:
            Literal lc = new Literal();
            lc.Text = columnName;
            container.Controls.Add(lc);
            break;
            case DataControlRowType.DataRow:
            // Create the controls to put in a data row
            // section and set their properties.
            CheckBox chb = new CheckBox();
            chb.ID = "chbx";
            container.Controls.Add(chb);
            break;
            default:
            break;
        }
     }
}

public partial class Tester : System.Web.UI.Page
{

    protected void Go_Click(object sender, EventArgs e)
    {
        string connectionString =
        ConfigurationManager.ConnectionStrings["SANDBOXConnectionString"].ConnectionString;
        SqlConnection con = new SqlConnection(connectionString);
        SqlDataAdapter adapter = new SqlDataAdapter("select * from SANDBOX.dbo.TestTable", con);
        DataSet ds = new DataSet();
        adapter.Fill(ds);
        GridView1.DataSource = ds.Tables[0];
        AddChecker();
        GridView1.DataBind();

        con.Close();
    }

    protected void AddChecker()
    {
        TemplateField check = new TemplateField();
        check.HeaderText = "Selected";
        check.ItemTemplate = new GridViewTemplate(DataControlRowType.DataRow, "Selector");
        check.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, "Selector");
        GridView1.Columns.Add(check);
    }

    protected void done_Click(object sender, EventArgs e)
    {
        foreach (GridViewRow gvr in this.GridView1.Rows)
        {
            CheckBox chb = (CheckBox)gvr.FindControl("chbx");

            if (((CheckBox)gvr.FindControl("chb")).Checked == true)
            {
                // do something()
            }
        }
    }
}
8 фев 10, 20:32    [8313854]     Ответить | Цитировать Сообщить модератору
 Re: FindControl GridView  [new]
...хм...
Guest
автор
Не понимаю почему не находится контрол ID chbx в IF

потому, что контролы имеют степень вложенности!
всё не читал, но полагаю, чекбокс лежит глубже уровня, чем ты ищещь.
8 фев 10, 21:06    [8313939]     Ответить | Цитировать Сообщить модератору
 Re: FindControl GridView  [new]
Robb
Member

Откуда: там и тут
Сообщений: 949
...хм...,

а по сути я правильно делаю?
8 фев 10, 21:28    [8313992]     Ответить | Цитировать Сообщить модератору
 Re: FindControl GridView  [new]
...хм...
Guest
автор
а по сути я правильно делаю?

ищешь серверный контрол методом FindControl!? Думаю - да.
8 фев 10, 21:36    [8314016]     Ответить | Цитировать Сообщить модератору
 Re: FindControl GridView  [new]
Robb
Member

Откуда: там и тут
Сообщений: 949
...хм...,

У меня такое ощущение что DataBind рушит структуру строки, затирает как-то чекбокс, но в датагрид чекбокс отображается.
а найти в строке его не получается.
И поиск по имени контрола на сервере FindControl = chbx приносит null.

То есть на сервере в этой странице его по этому имени нет, но ДатаГрид его отображает!!!!

Почему не понимаю.
8 фев 10, 22:01    [8314098]     Ответить | Цитировать Сообщить модератору
 Re: FindControl GridView  [new]
Robb
Member

Откуда: там и тут
Сообщений: 949
Ладно, тогда такой вопрос.

Если я определил первую колонку как как чекбокс, то как красиво вписать (пристыковать, джойнить) остальные данные из ДатаТабл , если структура таблы не известна в дизайнтайм, а поступает в динамике, после селекта.

Делать последовательную стыковку в ручную? как-то меня это напрягает.
8 фев 10, 22:11    [8314143]     Ответить | Цитировать Сообщить модератору
 Re: FindControl GridView  [new]
...хм...
Guest
Control.FindControl.FindControl.FindControl and etc - вполне лигитимная конструкция!

Больше добавить по САБЖу увы нечего.
8 фев 10, 22:44    [8314241]     Ответить | Цитировать Сообщить модератору
 Re: FindControl GridView  [new]
Robb
Member

Откуда: там и тут
Сообщений: 949
короче забил я на этот темплейт айтем.. сделал через ивент добавления строки.
9 фев 10, 07:50    [8314642]     Ответить | Цитировать Сообщить модератору
 Re: FindControl GridView  [new]
МСУ
Member [заблокирован]

Откуда: http://codearticles.ru
Сообщений: 31089
Robb
короче забил я на этот темплейт айтем.. сделал через ивент добавления строки.

Вот это по-нашему
9 фев 10, 09:20    [8314849]     Ответить | Цитировать Сообщить модератору
 Re: FindControl GridView  [new]
_dirty
Member

Откуда:
Сообщений: 88
Попробуй посмотреть, какой из методов вызывается в каком порядке. Наверное, когда ты кликаешь по кнопке о форме, у тебя идет создание страницы на севере, грид заполняется данными, потом отрабатывает метод done_Click, а только потом в грид динамически попадает чекбокс.
9 фев 10, 12:12    [8316219]     Ответить | Цитировать Сообщить модератору
 Re: FindControl GridView  [new]
Robb
Member

Откуда: там и тут
Сообщений: 949
МСУ
Robb
короче забил я на этот темплейт айтем.. сделал через ивент добавления строки.

Вот это по-нашему


Это плохо.
Нет возможности заголовки проставить нормально.

Но пока, сойдет.

Не нашел вменяемого кода как сделать по науке.
9 фев 10, 15:18    [8317857]     Ответить | Цитировать Сообщить модератору
 Re: FindControl GridView  [new]
Robb
Member

Откуда: там и тут
Сообщений: 949
_dirty
Попробуй посмотреть, какой из методов вызывается в каком порядке. Наверное, когда ты кликаешь по кнопке о форме, у тебя идет создание страницы на севере, грид заполняется данными, потом отрабатывает метод done_Click, а только потом в грид динамически попадает чекбокс.


ну давай разберемся.

клиенту от сервера приходят тэги, синхронизированные с объектом класса гридвью на сервере.
юзер в браузере потыкал, состояния контролов изменились.
следующий постбэк на сервер пошлет весь дамп для страницы и сессии, включая новые состояния контролов (чекбоксов).
сервер депарсит хидер и тело HTTP ответа и проставит новые состояния контролов в объекте гридвью.

сервер загрузит дататаблу и сбиндит данные с гридвью, фактически построит HTML тэги для заголовков и данных.

так вот на бИнде там должны появиться новая колонка с чекбоксами.
если чекбоксы появятся до бинда с данными, которые динамически зальются в гридвью (т.к. заранее сдизайнить нельзя в моем случае), то скорее всего там будет каша, в которой не разберешься.

По-сему видимо правильно добавлять колонку с чекбоксами в дататаблу и потом биндить в тэги.

а вот можно ли в АСП в таблу ставить колонку с контролами пока не знаю.

ща посмотрю.
9 фев 10, 15:38    [8318022]     Ответить | Цитировать Сообщить модератору
 Re: FindControl GridView  [new]
Robb
Member

Откуда: там и тут
Сообщений: 949
венее не контрол, а булллллл
9 фев 10, 15:42    [8318053]     Ответить | Цитировать Сообщить модератору
 Re: FindControl GridView  [new]
Zoria
Member

Откуда:
Сообщений: 14147
Robb,

gvr.Сells[0].FindControl("chbx") так вы пробовали найти чекбокс?
9 фев 10, 16:08    [8318280]     Ответить | Цитировать Сообщить модератору
 Re: FindControl GridView  [new]
Robb
Member

Откуда: там и тут
Сообщений: 949
Zoria,

конечно, нету там ничего.
9 фев 10, 16:37    [8318557]     Ответить | Цитировать Сообщить модератору
 Re: FindControl GridView  [new]
Zoria
Member

Откуда:
Сообщений: 14147
Robb,

динамически добавляемые контролы нужно восстанавливать при каждом постбэке не позднее Page_Load.
9 фев 10, 17:16    [8319003]     Ответить | Цитировать Сообщить модератору
 Re: FindControl GridView  [new]
Robb
Member

Откуда: там и тут
Сообщений: 949
Zoria,

дя я уж сделал на дабавление новой строки... вроде нормально работает.

и потом все находит и хрен бы с ним.

К сообщению приложен файл. Размер - 0Kb
9 фев 10, 17:32    [8319127]     Ответить | Цитировать Сообщить модератору
Все форумы / ASP.NET Ответить