5
사이의 숨김ASP.NET 동적으로 생성 TableRows가 영문 포스트 백
<asp:Table ID="superTable" runat="server" Width="100%">
<%--populate me on the fly!--%>
</asp:Table>
<asp:Button ID="btnAddRow" runat="server" CausesValidation="false" Text="Add Row" onclick="btnAddRow_Click" Width="90%"/>
<asp:Button ID="btnRemoveRow" runat="server" CausesValidation="false" Text="Remove Last Row" onclick="btnRemoveRow_Click" Width="90%"/>
<asp:Button ID="btnSubmit" runat="server" Text="1" onclick="btnSubmit_Click" Width="90%"/>
관련 비트를 유지하지 않을 것이다
protected void Page_Load(object sender, EventArgs e)
{if (!IsPostBack){ writeHeader(); makeMeARow(); }}
protected void btnAddRow_Click(object sender, EventArgs e)
{
if (int.Parse(btnSubmit.Text) <= 20)
{ int b = superTable.Rows.Count+1;
writeHeader();
btnSubmit.Text = (int.Parse(btnSubmit.Text) + 1).ToString();
for (int a = 1; a <= int.Parse(btnSubmit.Text); a++)
{ makeMeARow(); }
}
else{/*tell user they can't do that! Max of 20 rows as noted by form requirements */}
}
private void writeHeader()
{
//= == create row == =//
TableHeaderRow tempHeaderRow = new TableHeaderRow();//make row
//= == create cells == =//
TableHeaderCell tempHeaderCell01 = new TableHeaderCell();
TableHeaderCell tempHeaderCell02 = new TableHeaderCell();
TableHeaderCell tempHeaderCell03 = new TableHeaderCell();
tempHeaderCell01.Text = "Call Number"; tempHeaderCell01.Width = Unit.Percentage(33);
tempHeaderCell02.Text = "Author"; tempHeaderCell02.Width = Unit.Percentage(33);
tempHeaderCell03.Text = "Title"; tempHeaderCell03.Width = Unit.Percentage(33);
//= == add TableCells to TableRow == =//
tempHeaderRow.Cells.Add(tempHeaderCell01);
tempHeaderRow.Cells.Add(tempHeaderCell02);
tempHeaderRow.Cells.Add(tempHeaderCell03);
//superTable.Rows.AddAt(superTable.Rows.Count, tempRow);
superTable.Rows.Add(tempHeaderRow);
}
protected void btnRemoveRow_Click(object sender, EventArgs e)
{ int b = superTable.Rows.Count - 1;
writeHeader();
btnSubmit.Text = (int.Parse(btnSubmit.Text) - 1).ToString();
for (int a = 1; a <= int.Parse(btnSubmit.Text); a++)
{makeMeARow();}
}
private void makeMeARow()
{
//= == maybe off by one? == =//
string rowCount = superTable.Rows.Count.ToString("00");
//= == create row == =//
TableRow tempRow = new TableRow();//make row
//= == create cells == =//
TableCell tempCell01 = new TableCell();
TableCell tempCell02 = new TableCell();
TableCell tempCell03 = new TableCell();
//= == create TextBoxes == =//
TextBox tempTextBox01 = new TextBox();
TextBox tempTextBox02 = new TextBox();
TextBox tempTextBox03 = new TextBox();
//= == change the ID of TableRow == =//
tempRow.ID = "tableRow_" + rowCount;
//= == change the IDs of TableCells == =//
tempCell01.ID = "tableCell_" + rowCount + "_01";
tempCell02.ID = "tableCell_" + rowCount + "_02";
tempCell03.ID = "tableCell_" + rowCount + "_03";
//= == change the IDs of TextBoxes == =//
tempTextBox01.ID = "txtCallNumber_" + rowCount;
tempTextBox02.ID = "txtAuthor_" + rowCount;
tempTextBox03.ID = "txtTitle_" + rowCount;
//= == change TextBox widths to 90%;
tempTextBox01.Width = Unit.Percentage(90);
tempTextBox02.Width = Unit.Percentage(90);
tempTextBox03.Width = Unit.Percentage(90);
//= == add TextBoxes to TableCells == =//
tempCell01.Controls.Add(tempTextBox01);
tempCell02.Controls.Add(tempTextBox02);
tempCell03.Controls.Add(tempTextBox03);
//= == add TableCells to TableRow == =//
tempRow.Cells.Add(tempCell01);
tempRow.Cells.Add(tempCell02);
tempRow.Cells.Add(tempCell03);
//add TableRow to superTable
//superTable.Rows.AddAt(superTable.Rows.Count, tempRow);
superTable.Rows.Add(tempRow);
}
좋아, 내 문제; - "행 추가"또는 "행 제거"버튼을 누르면 셀의 데이터가 포스트 백간에 유지되지 않습니다. 관련 행과 셀은 동일한 ID를 보유하지만 데이터는 유지하지 않습니다. 왜 안돼?
ViewState를 사용할 수 있습니까? – n8wrl
잘 모름 - 어떻게 그리고 어디에서 할 수 있습니까? – statue
ASP : Table은 ViewState에서 내용을 유지해야한다고 생각하지 않지만 완전히 확신 할 수는 없습니다. 일반적으로 ASP.NET 재고 있음 모든 포스트 백 모든 동적 컨트롤을 복원해야합니다. 서버 측에 충분한 데이터가없는 경우 ViewState에 추가 정보를 입력 할 수 있습니다. – Zarat