我有一個列表視圖,顯示按鈕單擊時創建的文本框列表。我還想在每個txtbox旁邊創建一個標籤,它將從步驟x開始遞增:步驟x + 1:有關asp:listview和多個動態創建的控件的問題
是否需要爲此創建另一個listview控件,或者是否更容易方式(我希望)?
這裏是我的列表視圖當前網頁代碼:
<tr align="center" valign="middle">
<td>
<asp:ListView ID="lvDynamicTextboxes" runat="server" ItemPlaceholderID="itemPlaceholder" onitemdatabound="lvDynamicTextboxes_ItemDataBound">
<LayoutTemplate>
<asp:PlaceHolder ID="itemPlaceholder" runat="server" />
</LayoutTemplate>
<ItemTemplate>
<asp:Label ID="lblStep" runat="server" Text="Step 1:" />
<asp:TextBox ID="txtStep" runat="server" TextMode="MultiLine" Rows="3" Width="300" style="margin-top:10px;" />
</ItemTemplate>
</asp:ListView>
<br /><asp:Button ID="btnAddNewStep" runat="server" Text="Add another step" onclick="btnAddNewStep_Click" style="margin-top:5px;" />
</td>
</tr>
這裏是代碼隱藏
protected void btnAddNewStep_Click(object sender, EventArgs e)
{
this.UpdateDataSource();
this.IncrementTextboxCount();
this.BindListView();
}
private void BindListView()
{
//create an enumerable range based on the current count
List<string> dataSource = this.GetDataSource();
//bind the listview
this.lvDynamicTextboxes.DataSource = dataSource;
this.lvDynamicTextboxes.DataBind();
}
private void IncrementTextboxCount()
{
List<string> dataSource = this.GetDataSource();
dataSource.Add(string.Empty);
this.SetDataSource(dataSource);
}
private List<string> GetDataSource()
{
List<string> dataSource = null;
if (ViewState[ "DataSource" ] != null)
dataSource = (List<string>)ViewState[ "DataSource" ];
else
{
dataSource = new List<string>();
dataSource.Add(string.Empty);
ViewState[ "DataSource" ] = dataSource;
}
return dataSource;
}
private void UpdateDataSource()
{
List<string> dataSource = new List<string>();
foreach (ListViewItem item in this.lvDynamicTextboxes.Items)
if (item is ListViewDataItem)
{
TextBox txt = (TextBox)item.FindControl("txtStep");
dataSource.Add(txt.Text);
}
this.SetDataSource(dataSource);
}
protected void lvDynamicTextboxes_ItemDataBound(object sender, ListViewItemEventArgs e)
{
if (e.Item is ListViewDataItem)
{
TextBox txt = (TextBox)e.Item.FindControl("txtStep");
txt.Text = ((ListViewDataItem)e.Item).DataItem.ToString();
}
}
private void SetDataSource(List<string> dataSource)
{
ViewState[ "DataSource" ] = dataSource;
}
編輯::
因爲似乎有一點混淆,我試圖澄清:
截至目前,我有一個文本框在列表視圖中的一個按鈕ü nderneath。
________
| txtbox |
|________|
_____
|_btn_|
當你點擊一個按鈕,它會產生另一個文本框,所以點擊兩次導致此:
________
| txtbox |
|________|
________
| txtbox |
|________|
________
| txtbox |
|________|
_____
|_btn_|
這些文本框是建立在一個工藝步驟,因此,所有我想do是在每個生成的文本框旁邊添加一個生成的標籤以說明它是哪一步。所以,我希望它看起來像這樣:
________
["Step 1"] | txtbox |
|________|
________
["Step 2"] | txtbox |
|________|
________
["Step 3"] | txtbox |
|________|
_____
|_btn_|
如果他們再次單擊該按鈕,然後用文本「第4步」
中澄清這是奇怪的。究竟使用兩個ListView會讓你無法用一個ListView完成?您正在使用相同的數據源並同時綁定它們。你沒有看到這個問題? – Bryan 2010-01-16 00:14:51
我確實說過它不漂亮。我知道這還不夠高雅,但我不明白如何控制列表視圖以使其更好。我已經用一個listview做了幾次嘗試,但是我一直在打牆。標籤根本不顯示,或者它們都具有相同的文本。 – Justen 2010-01-18 14:03:47