ASP:GridView文本框始终返回空值

5
我使用以下代码向GridView添加了一些文本框。
<asp:TemplateField HeaderText="STD<br/>ID">
       <ItemStyle BackColor="LightBlue" />
          <ItemTemplate>
          <div style="font-size:xx-small; overflow:hidden;">
          <asp:TextBox ID="txtStandard" EnableViewState="true" Height="10" Font-Size="XX-Small" Width="50" Text='<%# bind("STANDARD_ID") %>' runat="server"></asp:TextBox>
       <asp:AutoCompleteExtender ID="AutoCompleteExtenderDemo" runat="server" 
            TargetControlID="txtStandard" ServiceMethod="GetCompletionList"
            MinimumPrefixLength="1" CompletionInterval="1000"
            EnableCaching="true" CompletionSetCount="20">
        </asp:AutoCompleteExtender>
                        </div>



                    </ItemTemplate>
                </asp:TemplateField>

我希望您能将更新后的值保存到数据库中,但是当我尝试使用时访问这些值时,出现了问题:
string strs = ((TextBox)TwoHeadedGridView1.Rows[0].FindControl("txtStandard")).Text;

对于所有行,它总是返回空值。下拉列表也是同样的情况,它返回最初选择的值,即在编写下拉框时选择的值,在我的asp表单中没有重复的id存在。这是我第一次与自定义gridview互动,我希望以某种方式使其运行。

有人能建议我进行任何更正吗?

我已经检查过是否存在任何重复的id。


你在什么时候尝试获取更新后的值? - David Neale
我有一个提交按钮,它调用服务器端函数,该函数调用GridViewRow的查找控件。 - Xinus
2个回答

4
我在这里找到了解决这个问题的方法: http://www.eggheadcafe.com/software/aspnet/29602882/gridview--cant-get-text.aspx 请记住,网页本质上是无状态的!
当您的GridView触发事件时,您的Page_Load方法会执行,然后执行处理GridView事件的方法。我仍然无法相信自己的眼睛,但似乎即使您手动将来自GridView数据源的值分配给TextBoxes,当GridView.DataBind方法执行时,用户键入的值也会被清除。 简而言之,如果您的代码像我的一样,在Page_Load方法中有以下两行代码:
myGridView.DataSource = someDataSet; myGridView.DataBind(); 要解决此问题,请更改为以下内容: if (!IsPostBack) { myGridView.DataSource = someDataSet; myGridView.DataBind(); }
顺便说一句,我使用VB.net工作,因此请让我知道我是否已经为您转换为C#。我想听听这对您也起作用!

0
你是在哪里尝试访问这些值?如果你是在RowUpdated函数中访问它们,那么这些值将会是空的。请在RowUpdating期间访问它们,并确保取消更新。

我相信我正在处理一个页面时遇到了完全相同的问题,我确信正在从处理“RowUpdating”事件的方法中访问值。 - Vivian River

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接