2

我在 Telerik 论坛上问过这个问题,但有时那里的反应可能很慢。我想知道这里是否有人知道该怎么做。

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

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

当我自动回发时,有什么方法可以确定他们编辑了哪个文本框?

万一有人问,我不想强​​迫我的用户单击一个按钮使该行进入编辑模式,更改数字,然后单击一个按钮来保存该行。

4

2 回答 2

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
于 2013-01-17T22:31:48.083 回答
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 

}

希望这会有所帮助。

于 2013-05-01T08:19:29.817 回答