确定哪个控件在列表视图中触发事件

时间:2013-01-09 21:35:51

标签: asp.net .net telerik telerik-ajax

我在telerik论坛上问过这个问题,但有时回复可能会很慢。我想知道这里是否有人知道如何解决这个问题。

我处于一种情况,即用户将拥有可变数量的项目,并且在每个项目旁边我想要一个RadNumericTextBox。我正在考虑使用RadListView并将模板设置为项目名称和与之关联的RadNumericTextBox。我想忽略RadListView的编辑,创建和更高级的功能。我只想要一个带有输入框的项目列表,当用户更改了值时,它会自动回发。

我面临的问题是当用户更改文本框中的数字时,我如何知道这是哪个文本框?我想看看RadNumericTextBox上是否有一个属性可以保存任意值,例如我的项目键,所以我知道他们改变了哪个数字。但是,我没有看到这样的属性。

有什么方法可以确定我自动回发后编辑哪个文本框?

如果有人问,我不想强​​迫用户点击按钮使行进入编辑模式,更改数字,然后单击按钮保存行。

2 个答案:

答案 0 :(得分:0)

您可以使用Repeater控件执行此操作。

在转发器的项目模板中包含RadNumericTextBox,然后为其编写服务器端事件处理程序。可以通过事件处理程序的sender对象访问文本框的客户端ID,但如果信息不足,则可以依赖转发器的数据源将所需的数据与每个文本框相关联。

最简单的方法可能是使用文本框的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

答案 1 :(得分:0)

您可以通过将listview与数据源绑定在一起的项目, 使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 

}

希望这有帮助。

相关问题