WedX - журнал о программировании и компьютерных науках

Ошибка ввода строки не в правильном формате, только если для свойства Visible столбца ID установлено значение false

На моей странице есть GridView для управления фабричными заводами. Я могу успешно редактировать данные в сетке, щелкнув ссылку редактирования, а затем сохранив свои изменения после нажатия ссылки обновления. Я хочу, чтобы столбец ID сетки был скрыт от пользователя, поэтому я добавил свойство Visible в столбец Plant_ID сетки и установил для него значение false, столбец скрыт, но я получаю сообщение об ошибке: «Входная строка не была в правильном формате» после перехода по ссылке обновления.

Это мой источник данных Grid и SQL:

<asp:GridView  ID="GridPlants" runat="server" DataKeyNames="Plant_ID" AllowPaging="True" PageSize="7" 
                        AllowSorting="True" AutoGenerateColumns="False" AutoGenerateEditButton="True" 
                        BorderWidth="2px" CellPadding="2" CssClass="datatable" GridLines="None" 
                        ShowFooter="True" SortedAscendingCellStyle-CssClass="sortasc" OnSorting="gvPlant_Sorting" 
                        SortedAscendingHeaderStyle-CssClass="sortasc" 
                        SortedDescendingCellStyle-CssClass="sortdesc" 
                        SortedDescendingHeaderStyle-CssClass="sortdesc" 
                           OnRowCancelingEdit="GridPlants_RowCancelingEdit" 
                        OnRowEditing="GridPlants_RowEditing" OnRowUpdating="GridPlants_RowUpdating" OnPageIndexChanging="gvPlants_PageIndexChanging" 
                        >
                        <EditRowStyle />
                        <PagerStyle CssClass="pager-row" />
                        <RowStyle CssClass="row" />
                        <Columns>
                             <asp:BoundField DataField="Plant_ID" HeaderText="ID" InsertVisible="False" 
                                ReadOnly="True" SortExpression="Plant_ID" Visible="false" />
                            <asp:TemplateField HeaderText="Plant Name" SortExpression="Plant_Name">
                                <EditItemTemplate>
                                    <asp:TextBox ID="Txtplant" runat="server" Text='<%# Bind("Plant_Name") %>'></asp:TextBox>
                                </EditItemTemplate>
                                <ItemTemplate>
                                    <asp:Label ID="Label1" runat="server" Text='<%# Bind("Plant_Name") %>'></asp:Label>
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Plant Code" SortExpression="Plant_code">
                                <EditItemTemplate>
                                    <asp:TextBox ID="Txtcode" runat="server" Text='<%# Bind("Plant_code") %>'></asp:TextBox>
                                </EditItemTemplate>
                                <ItemTemplate>
                                    <asp:Label ID="Label2" runat="server" Text='<%# Bind("Plant_code") %>'></asp:Label>
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Address" SortExpression="Address">
                                <EditItemTemplate>
                                    <asp:TextBox ID="Txtaddress" runat="server" Text='<%# Bind("Address") %>'></asp:TextBox>
                                </EditItemTemplate>
                                <ItemTemplate>
                                    <asp:Label ID="Label3" runat="server" Text='<%# Bind("Address") %>'></asp:Label>
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="City" SortExpression="City">
                                <EditItemTemplate>
                                    <asp:TextBox ID="Txtcity" runat="server" Text='<%# Bind("City") %>'></asp:TextBox>
                                </EditItemTemplate>
                                <ItemTemplate>
                                    <asp:Label ID="Label4" runat="server" Text='<%# Bind("City") %>'></asp:Label>
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="State" SortExpression="State">
                                <EditItemTemplate>
                                    <asp:TextBox ID="Txtstate" runat="server" Text='<%# Bind("State") %>'></asp:TextBox>
                                </EditItemTemplate>
                                <ItemTemplate>
                                    <asp:Label ID="Label5" runat="server" Text='<%# Bind("State") %>'></asp:Label>
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Zip" SortExpression="Zip">
                                <EditItemTemplate>
                                    <asp:TextBox ID="Txtzip" runat="server" Text='<%# Bind("Zip") %>'></asp:TextBox>
                                </EditItemTemplate>
                                <ItemTemplate>
                                    <asp:Label ID="Label6" runat="server" Text='<%# Bind("Zip") %>'></asp:Label>
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Plant Email" SortExpression="Plant_Email">
                                <EditItemTemplate>
                                    <asp:TextBox ID="Txtemail" runat="server" Text='<%# Bind("Plant_Email") %>'></asp:TextBox>
                                </EditItemTemplate>
                                <ItemTemplate>
                                    <asp:Label ID="Label7" runat="server" Text='<%# Bind("Plant_Email") %>'></asp:Label>
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Active" SortExpression="Active">
                                <EditItemTemplate>
                                    <asp:CheckBox ID="Chkactive" runat="server" Checked='<%# Bind("Active") %>' 
                                        Enabled="false" />
                                </EditItemTemplate>
                                <ItemTemplate>
                                    <asp:CheckBox ID="CheckBox2" runat="server" Checked='<%# Bind("Active") %>' 
                                        Enabled="false" />
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:BoundField DataField="UpdateBy" HeaderText="Update By" 
                                ReadOnly="True" SortExpression="UpdateBy" />
                            <asp:BoundField DataField="UpdateDate" HeaderText="Update Date" ReadOnly="True" 
                                SortExpression="UpdateDate" />
                        </Columns>
                       <%-- <PagerSettings FirstPageText="«" LastPageText="»" Mode="NumericFirstLast" 
                            PageButtonCount="7" />--%>
                        <SortedAscendingCellStyle CssClass="sortasc" />
                        <SortedAscendingHeaderStyle CssClass="sortasc" />
                        <SortedDescendingCellStyle CssClass="sortdesc" />
                        <SortedDescendingHeaderStyle CssClass="sortdesc" />
                    </asp:GridView>

                    <asp:SqlDataSource  ID="PlantDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:ShipmentNotification %>"
                SelectCommand="select Plant_ID, Plant_Name, Plant_code, Address, City, State, Zip, Plant_Email, Active, UpdateDate, UpdateBy from Plant order by plant_code">
                 </asp:SqlDataSource> 

Это моя функция обновления:

 Protected Sub GridPlants_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GridPlants.RowUpdating
        Dim Editrow As GridViewRow = GridPlants.Rows(e.RowIndex)



Dim PlantId As String = GridPlants.DataKeys(e.RowIndex)("Plant_ID")
            Dim textplant As TextBox = Editrow.FindControl("txtplant")
            Dim textcode As TextBox = Editrow.FindControl("txtcode")
            Dim checkbox As CheckBox = Editrow.FindControl("chkactive")
            Dim address As TextBox = Editrow.FindControl("txtaddress")
            Dim city As TextBox = Editrow.FindControl("txtcity")
            Dim state As TextBox = Editrow.FindControl("txtstate")
            Dim zip As TextBox = Editrow.FindControl("txtzip")
            Dim email As TextBox = Editrow.FindControl("txtemail")

    'I get an error on the following line:
            DL.AddUpdatePlants("Admin", "Edit", Editrow.Cells(1).Text, textplant.Text, textcode.Text, address.Text, city.Text, state.Text, zip.Text, email.Text, checkbox.Checked)
            'CType(Editrow.Cells(2).Controls(0), TextBox)).
            GridPlants.EditIndex = -1
            BindData()


        End Sub

... Фрагмент хранимой процедуры:

Dim myCommand As New SqlCommand("SavePlantDetails", myConnection)
            myCommand.CommandType = CommandType.StoredProcedure


            myCommand.Parameters.AddWithValue("@editType", addupdate)
            myCommand.Parameters.AddWithValue("@Plant_ID", plant_id)
            myCommand.Parameters.AddWithValue("@Plant_Name", name)
            myCommand.Parameters.AddWithValue("@Plant_code", code)
            myCommand.Parameters.AddWithValue("@address", address)
            myCommand.Parameters.AddWithValue("@city", city)
            myCommand.Parameters.AddWithValue("@state", state)
            myCommand.Parameters.AddWithValue("@zip", zip)
            myCommand.Parameters.AddWithValue("@email", email)
            myCommand.Parameters.AddWithValue("@username", username)
            myCommand.Parameters.AddWithValue("@Active", active)
            myCommand.ExecuteNonQuery()

            myConnection.Close()

... Мне интересно, скрывает ли это поле Plant_ID, как я упорядочиваю свои столбцы? Могу ли я получить некоторую помощь с этой проблемой, пожалуйста? Я получаю сообщение об ошибке только после того, как добавил свойство Visible в столбец Plant_ID и установил для него значение True. Заранее спасибо.

02.04.2014

  • Должен ли Editrow.Cells(1).Text содержать идентификатор вашего растения? 02.04.2014

Ответы:


1

Ваше значение для Editrow.Cells(1).Text может не соответствовать видимому ложному значению.

Вы можете использовать свойство DataKeyNames представления сетки, чтобы получить это значение.

установите его следующим образом:

<asp:GridView  ID="GridPlants" runat="server" DataKeyNames="Plant_ID" /> // rest of gridview markup

получить его следующим образом:

Dim PlantId as String = GridPlants.DataKeys(e.RowIndex)("Plant_ID")

и используйте это в своей функции обновления.

02.04.2014
  • Я попробовал рекомендацию, но все равно получаю ту же ошибку. Пожалуйста, дайте мне знать, если у вас есть другие предложения. Я применил рекомендуемые изменения к приведенному выше коду. 03.04.2014
  • я не вижу, чтобы PlantId использовался в строке DL.AddUpdatePlants(Admin, Edit, Editrow.Cells(1).Text.. вам нужно заменить Editrow.Cells(1).Text идентификатором растения.. в этой заметке , что показывает GridPlants.DataKeys(e.RowIndex)? поставьте точку останова и сообщите нам... там должен быть ваш plantid 03.04.2014
  • Моя ошибка, как вы указали, я пропустил PlantID, и да, когда я поместил точку останова в GridPlants.DataKeys(e.RowIndex) - он содержал идентификатор завода. Большое спасибо за вашу помощь. 04.04.2014

  • 2

    Концепция:

    Editrow.Cells(1).Text 
    

    или вообще: rows.Cells(index).Text можно использовать ТОЛЬКО для чтения данных из поля <asp:BoundField>.

    Если у вас есть TemplateFields, как в <ItemTemplate> и <EditItemTemplate>, вы должны использовать метод FindControl().

    Здесь вы установили AutoGenerateEditButton="true", таким образом, ваш первый столбец (очевидно, Cell Zero) будет фактически содержать кнопки редактирования. Начиная со 2-го столбца (ячейка 1) будут ваши поля, как вы определили в разметке GridView.

    СЛУЧАЙ I::

    Когда вы установили Visible="true" для своего первого поля <asp:BoundField>, тогда Cells(1).Text фактически ссылается на текст внутри вашего связанного поля, что является правильным.

    СЛУЧАЙ II::

    Однако, когда вы устанавливаете Visible="false" для своего первого поля <asp:BoundField>, тогда Cells(1).Text больше НЕ относится к первому BoundField, но на самом деле это следующие TemplateField: Plant_Name. Данные/текст в случае столбца <asp:TemplateField> находятся не внутри Cells, а внутри элементов управления, размещенных в этих полях TemplateField. Это причина, по которой вы получаете ошибку.

    03.04.2014
    Новые материалы

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..


    Для любых предложений по сайту: [email protected]