2013-01-09 69 views
2

我在telerik論壇上詢問了這個問題,但有時候響應速度可能會很慢。我想知道這裏有沒有人知道如何去做這件事。確定哪個控件在列表視圖中觸發一個事件

我處於一種情況下,用戶將有可變數量的項目,並且在每個項目旁邊我想要一個RadNumericTextBox。我正在考慮使用RadListView並將模板設置爲項目名稱以及與其關聯的RadNumericTextBox。我想忽略RadListView的編輯,創建和更高級的功能。我只想要一個帶有輸入框的項目列表,當用戶更改值時會自動回發。

我面臨的問題是當用戶更改文本框中的數字時,我怎麼知道這是哪個文本框?我正在查看是否在RadNumericTextBox上有一個屬性可以保存任意值,例如我的項目密鑰,以便我知道他們更改了哪個數字。但是,我沒有看到這樣的屬性。

有什麼方法可以確定在我自動回發時他們編輯了哪個文本框?

如果有人問,我不想強​​迫我的用戶點擊一個按鈕,使該行進入編輯模式,更改號碼,然後點擊一個按鈕來保存一行。

回答

0

你可以用Repeater控件來做到這一點。

在中繼器的項目模板中包含RadNumericTextBox,然後爲其編寫服務器端事件處理程序。文本框的客戶端ID可以通過事件處理程序的sender對象訪問,但如果沒有足夠的信息可以依靠中繼器的數據源上涉及您需要每個文本框中的任何數據。

最簡單的方法可能是使用文本框的Label屬性。這裏有一個例子:

ASPX:

<asp:ScriptManager ID="ScriptManager1" runat="server"> 
</asp:ScriptManager> 
<asp:Repeater ID="Repeater1" runat="server">  
    <ItemTemplate> 
     <br /> 
     <telerik:RadNumericTextBox ID="radNTB" runat="server" AutoPostBack="true" OnTextChanged="radNTB_TextChanged" ClientIDMode="Predictable"></telerik:RadNumericTextBox> 
    </ItemTemplate> 
</asp:Repeater> 

VB:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    If Not IsPostBack Then 

     Dim dt As New DataTable 
     dt.Columns.Add("Column1", GetType(String)) 

     For i As Integer = 1 To 5 
      Dim row = dt.NewRow 
      row.Item("Column1") = "TextBox" & i.ToString 
      dt.Rows.Add(row) 
      dt.AcceptChanges() 
     Next 

     Repeater1.DataSource = dt 
     Repeater1.DataBind() 

    End If 
End Sub 

Private Sub Repeater1_ItemDataBound(sender As Object, e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles Repeater1.ItemDataBound 
    If (e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem) Then 

     Dim tb As RadNumericTextBox = e.Item.FindControl("radNTB") 
     tb.Label = DataBinder.Eval(e.Item.DataItem, "Column1").ToString() 

    End If 
End Sub 

Public Sub radNTB_TextChanged(sender As Object, e As EventArgs) 
    Dim ntb As RadNumericTextBox = sender 
    Response.Write(ntb.Label) 
End Sub 
0

你可以做的是該項目的結合與數據源的列表視圖, 使RadNumericTextBox的id等於您想要傳遞的項目密鑰。 在RadNumericTextBox的TextChanged事件中,將發件人對象轉換爲RadNumericTextBox類型。在這個 的情況下,你會得到你正在尋找的獨特的項目密鑰。 例如:

<asp:FormView ID="frmViewPicture" runat="server"> 
    <EditItemTemplate> 
    <telerik:RadNumericTextBox ID='Eval("ItemKey")' 
      OnTextChanged="radTxtNewPrice_TextChanged" AutoPostBack="true"> 
    </telerik:RadNumericTextBox>         
    </EditItemTemplate> 
</asp:FormView> 

確保該項目的關鍵是在你的數據源獨特的和可用的,其他明智的你會得到一個異常。

protected void radTxtNewPrice_TextChanged(object sender, EventArgs e) 
{ 
    Telerik.Web.UI.RadNumericTextBox txtRadNumericTextBox= (Telerik.Web.UI.RadNumericTextBox)sender; 
    var itemKey = txtRadNumericTextBox.ID; 
    // Do Your Logic Here 

} 

希望這會對您有所幫助。