1

我有一个 DetailsView,其中 1 个字段转换为 TemplateField,以便能够操作包含 TextBox 的 InsertItemTemplate(参见:下面的代码)。问题是我无法在后面的代码中访问该 TextBox 属性......而且我真的不明白:(这是我的 aspx 代码(它的一部分):

<asp:DetailsView ID="_DetailsView" ClientIDMode="Static" runat="server" Height="50px"
        Width="125px" AllowPaging="True" AutoGenerateRows="False" DataKeyNames="IDUniv"
        DataSourceID="EntityDS" OnModeChanging="_OnModeChanging">
        <Fields>
            <asp:TemplateField HeaderText="DateUpdateUniv" SortExpression="DateUpdateUniv" ConvertEmptyStringToNull="False">
                <InsertItemTemplate>
                    <asp:TextBox ID="TextBoxInsertItem" runat="server" Text='<%# Bind("DateUpdateUniv") %>'></asp:TextBox>
                </InsertItemTemplate>
                <ItemTemplate>
            </asp:TemplateField>
            <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" ShowInsertButton="True" />
        </Fields>
    </asp:DetailsView>
    <asp:EntityDataSource ID="EntityDS">

在 Page_LoadComplete 事件处理程序中,我有这样的事情:

private void Page_LoadComplete(object sender, EventArgs e)
    {
        if (_DetailsView.HasControls())
        {
            Control _InsertDate = _DetailsView.FindControl("TextBoxInsertItem") as TextBox;
            if (_InsertDate != null)
            {
                _InsertDate.Text  = "something";
            }
        }
    }

但以下代码是错误的:_DetailsView.FindControl("TextBoxInsertItem") 而且这也不起作用:_InsertDate.Text = "something";

我发现了一篇有趣的文章,但仍然......: http: //www.devproconnections.com/article/aspnet2/getting-under-the-detailsview-control

有人可以帮我找到我的路吗?如何找到这个 TextBoxInsertItem 控件并与之交互?谢谢

4

2 回答 2

3
 TextBox txtB = _DetailsView.FindControl("TextBoxInsertItem") as TextBox;
 string text = txtB.Text;

试试这样?除了声明一个文本框而不是一个控件之外,我看不出有任何区别..我已经使用了这种从子控件获取数据的特殊方式,而且它总是对我有用。

于 2012-06-11T19:19:38.320 回答
2

我终于找到了解决方案:)并且有很多问题:

1.我的代码没有放在正确的Page_event中,我认为DetailsView必须在尝试“FindControl它们”之前正确呈现控件,所以我将它放在Page_LoadComplete中,但它是错误的。
DetailsView 带有一些事件,我们感兴趣的是OnItemCreated(在 System.Web.UI.WebControls.DetailsView 控件中创建记录时发生)。

2.我的测试不相关,正确的测试检查简单:

if (_DetailsView.FindControl("TextBoxInsertItem") != null)

3.我的Visual Sudio(不是SP1)充满了错误(当我运行相同的代码时,有时会抛出错误,有时不会,直到我关闭VS2010并重新打开它......

4.我必须初始化一个“文本框”而不是像简所说的“控件”

我希望这几行会有所帮助:) 并且正如 MSDN 中所说:您不应该创建依赖于按特定顺序引发的更改事件的应用程序逻辑,除非您对页面事件处理有详细的了解

于 2012-06-12T05:27:48.513 回答