我在telerik论坛上问过这个问题,但有时回复可能会很慢。我想知道这里是否有人知道如何解决这个问题。
我处于一种情况,即用户将拥有可变数量的项目,并且在每个项目旁边我想要一个RadNumericTextBox。我正在考虑使用RadListView并将模板设置为项目名称和与之关联的RadNumericTextBox。我想忽略RadListView的编辑,创建和更高级的功能。我只想要一个带有输入框的项目列表,当用户更改了值时,它会自动回发。
我面临的问题是当用户更改文本框中的数字时,我如何知道这是哪个文本框?我想看看RadNumericTextBox上是否有一个属性可以保存任意值,例如我的项目键,所以我知道他们改变了哪个数字。但是,我没有看到这样的属性。
有什么方法可以确定我自动回发后编辑哪个文本框?
如果有人问,我不想强迫用户点击按钮使行进入编辑模式,更改数字,然后单击按钮保存行。
答案 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
}
希望这有帮助。