Невозможно получить значение текстового поля templatefield в gridview

#c# #asp.net #vb.net #gridview

#c# #asp.net #vb.net #gridview

Вопрос:

Я пытаюсь извлечь значение, заполненное в текстовом поле templatefield, встроенном в gridview. Я пытался сделать это несколькими разными способами, но продолжаю получать сообщения об ошибках. Я могу извлечь значение из раскрывающегося элемента управления templatefield, встроенного в тот же gridview.

Разметка:

 <asp:TemplateField HeaderText="Renewal Date" >
     <ItemTemplate>
          <ajaxToolkit:CalendarExtender ID="cexRenewalDate" runat="server" TargetControlID="txtRenewalDate" PopupPosition="TopRight"
              Format="MM/dd/yyyy" PopupButtonID="btnimgCalendar" />
          <asp:TextBox ID="txtRenewalDate" runat="server" CssClass="RenewalDateTextBoxStyle" 
              onKeyPress="javascript: return false;" onPaste="javascript: return false;"/>
          <asp:ImageButton ID="btnimgCalendar" runat="server" ImageUrl="~/Images/Calendar.png" CssClass="CalendarImageButtonStyle"/>
     </ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Action">
    <ItemTemplate>
        <asp:DropDownList ID="drpOFActions" runat="server" CssClass="ActionDropDownStyle"/>
        <asp:LinkButton ID="lnkOFCommit" runat="server" Text="  Commit  " OnClick="lnkCommitOF_Click" CssClass="CommitLinkButtonStyle"
            OnClientClick="return confirm('Are you sure you want to complete this action?');"
            CommandArgument='<%# Container.DataItemIndex %>' />
    </ItemTemplate>
</asp:TemplateField>
 

Код позади:

 Dim temp As String = CType(grdGeneratedOrderForms.Rows(rowIndex).FindControl("txtRenewalDate"), TextBox)
 

Это приводит к тому, что ‘System.Web.UI.Control’ не может быть преобразован в ‘System.Windows.Формы.Ошибка текстового поля.

Я также пытался использовать это по чьему-то предложению:

 Dim temp As String = TryCast(grdGeneratedOrderForms.Rows(rowIndex).FindControl("txtRenewalDate"), System.Web.UI.Control.TextBox)
 

Это выдает тип ‘System.Web.UI.Control.Текстовое поле не определено ошибка.

Однако, когда я использую приведенное ниже значение для извлечения моего раскрывающегося списка, у меня нет проблем:

 Dim Action As Integer = TryCast(grdGeneratedOrderForms.Rows(rowIndex).FindControl("drpOFActions"), DropDownList).SelectedValue
 

Вот мои объявления пространства имен:

 Imports Oracle.DataAccess.Client
Imports System.IO
Imports System.Windows.Forms
Imports Aspose.Words
Imports Aspose.Words.Tables
Imports Ionic.Zip
 

Любые идеи будут высоко оценены…Спасибо!

Ответ №1:

Попробуйте это вместо этого. Я думаю, что у вас есть конфликт пространства имен в ваших операторах using

 Dim temp As String = CType(grdGeneratedOrderForms.Rows(rowIndex).FindControl("txtRenewalDate"), System.Web.UI.WebControls.TextBox).Text
 

Комментарии:

1. Спасибо, Киран. Это также дает мне тип ‘System.Web.UI.Control. Текстовое поле не определено ошибка. Я добавил свои объявления пространства имен в исходное сообщение.

2. Можете ли вы отладить код и проверить, какое значение имеет grdGeneratedOrderForms . Строки (RowIndex). FindControl(«txtRenewalDate»)?

3. Не могли бы вы подсказать мне, как это сделать? Я пытался выяснить, как просматривать значения объектов в gridview во время отладки, но безуспешно. Извините, если это материал для начинающих.

4. Поместите точку разрыва в строку, которую вы хотите разорвать. Когда извлечение останавливается во время выполнения, выберите часть кода, например grdGeneratedOrderForms. Строки (RowIndex). FindControl(«txtRenewalDate»), щелкните правой кнопкой мыши -> Добавить просмотр.

5. Это приложение Windows или веб? В упомянутом вопросе asp.net . Почему вы импортируете систему пространств имен. Windows. Формы? Можете ли вы также импортировать System.Web.UI.WebControls? Я внес изменения в ответ, можете ли вы попробовать это?