Member 11589429 Ответов: 1

Как получить доступ к динамически созданному значению элемента управления при нажатии кнопки событие


Я создал на веб-странице с помощью asp. net. после выбора конкретного студента (имя),из идентификатора этого студента, я извлекаю все темы, предлагаемые этому студенту из базы данных.Пользователь может добавлять/записывать полученные / достигнутые отметки к этому студенту(принимая входные данные от пользователя).После нажатия на кнопку, хотите сохранить данные. Здесь я создал динамический элемент управления,но не смог получить к нему доступ по событию нажатия кнопки.Как это сделать?

Что я уже пробовал:

Code ASPX:

<asp:Panel ID="PnlStudent" runat="server" Visible="false">
                    <asp:Table ID="tblStudent" runat="server" Width="600px">
                        <asp:TableRow>
                            <asp:TableCell Height=" 32px" ForeColor="#32417a" BackColor="#e5e5e5" Width="156px">
                                Subject
                            </asp:TableCell>
                            <asp:TableCell Height=" 32px" ForeColor="#32417a" BackColor="#e5e5e5" Width="156px">
                                Marks Optined
                            </asp:TableCell>
                        </asp:TableRow>
                    </asp:Table>
                </asp:Panel>


Code in Cs file :

protected void ddlStudent_SelectedIndexChanged(object sender, EventArgs e)
    {
           // fetch from Student table


      if (dsStudent != null)
                {
                    DataTable dt = dsStudent.Tables["Student"];
                    if (dt.Rows.Count > 0)
                    {
                        PnlStudent.Visible = true;
                        foreach (DataRow dr in dt.Rows)
                        {
                            TableRow NewRow1 = new TableRow();

                            TableCell NewCell1 = new TableCell();
                            NewCell1.Width = Unit.Pixel(156);
                            NewCell1.Height = Unit.Pixel(32);
                            NewCell1.ForeColor = System.Drawing.Color.LightSlateGray;
                            NewCell1.BackColor = System.Drawing.Color.LightGray;

                            Label newLable1 = new Label();
                            newLable1.Text = dr["Subject"].ToString();


                            NewCell1.Controls.Add(newLable1);
                            NewRow1.Cells.Add(NewCell1);

                            TableCell NewCell2 = new TableCell();
                            NewCell2.Height = Unit.Pixel(32);
                            NewCell2.BackColor = System.Drawing.Color.LightGray;

                            TextBox txtBox1 = new TextBox();

                            NewCell2.Controls.Add(txtBox1);
                            NewRow1.Cells.Add(NewCell2);
                            tblStudent.Rows.Add(NewRow1);
                        }


                    }
                }
}


protected void BtnSave_Click(object sender, EventArgs e)
    {
}

1 Ответов

Рейтинг:
0

Sheila Pontes

Привет,

Чтобы сделать то, что вы хотите, сначала введите уникальный идентификатор для каждого компонента, который вы добавляете динамически, например:

PnlStudent.Visible = true;
int index_row = 0;
foreach (DataRow dr in dt.Rows)
{
    TableRow NewRow1 = new TableRow();

    TableCell NewCell1 = new TableCell();
    NewCell1.Width = Unit.Pixel(156);
    NewCell1.Height = Unit.Pixel(32);
    NewCell1.ForeColor = System.Drawing.Color.LightSlateGray;
    NewCell1.BackColor = System.Drawing.Color.LightGray;

    Label newLable1 = new Label();
                    
    //type id in the label component
    newLable1.ID = "mylabel_" + index_row.ToString();
    
    newLable1.Text = dr["Subject"].ToString();
    NewCell1.Controls.Add(newLable1);
    NewRow1.Cells.Add(NewCell1);

    TableCell NewCell2 = new TableCell();
    NewCell2.Height = Unit.Pixel(32);
    NewCell2.BackColor = System.Drawing.Color.LightGray;

    TextBox txtBox1 = new TextBox();
    
    //type id in the textbox component 
    txtBox1.ID = "mytext_" + index_row.ToString();

    NewCell2.Controls.Add(txtBox1);
    NewRow1.Cells.Add(NewCell2);
    tblStudent.Rows.Add(NewRow1);

    index_row++;
}


Чтобы прочитать данные в компоненте, выполните следующие действия:

protected void BtnSave_Click(object sender, EventArgs e)
{
    string valuemytextbox, valuemylabel;
    int index_row = 0;
    bool header = true; // the first line is header 
    
    //read each line
    foreach (TableRow row in tblStudent.Rows)
    {
        // the first line is header
        if (header)
        {
            header = false;
        }
        else
        {
            //find components in the row
            valuemytextbox = ((TextBox)row.FindControl("mytext_" + index_row.ToString())).Text;
            valuemylabel = ((Label)row.FindControl("mylabel_" + index_row.ToString())).Text;

            //salve data in database
            ....

            index_row++;
        }
    }
}