обновление данных в связанном поле (входная строка имела неправильный формат).

У меня есть страница просмотра продуктов, и я хочу, чтобы при нажатии на ссылку редактирования были отредактированы два поля (имя и цена). вот мой html-код:

<ItemTemplate>
        <asp:LinkButton ID="LinkButton1" Text="Edit" runat="server" CommandName="Edit" />
    </ItemTemplate>
    <EditItemTemplate>
        <asp:LinkButton ID="LinkButton2" Text="Update" runat="server" OnClick="OnUpdate" />
        <asp:LinkButton ID="LinkButton3" Text="Cancel" runat="server" OnClick="OnCancel" />
    </EditItemTemplate>
</asp:TemplateField>

и код позади:

private void GetProducts(int CategoryID)
    {
        ShoppingCart k = new ShoppingCart()
        {
            CategoryID = CategoryID
        };
        gdview.DataSource = null;
        gdview.DataSource = k.GetAllProducts();
        gdview.DataBind();
    }
    protected void OnRowEditing(object sender, GridViewEditEventArgs e)
    {
        gdview.EditIndex = e.NewEditIndex;
        this.GetProducts(0);
    }
    protected void OnUpdate(object sender, EventArgs e)
    {
        GridViewRow row = (sender as LinkButton).NamingContainer as GridViewRow;
        string Name = (row.Cells[0].Controls[0] as TextBox).Text;
        string Price = (row.Cells[2].Controls[0] as TextBox).Text;
        DataTable dt = ViewState["dt"] as DataTable;
        dt.Rows[row.RowIndex]["Name"] = Name;
        dt.Rows[row.RowIndex]["Price"] = Price;
        ViewState["dt"] = dt;
        gdview.EditIndex = -1;
        this.GetProducts(0);
    }

    protected void OnCancel(object sender, EventArgs e)
    {
        gdview.EditIndex = -1;
        this.GetProducts(0);
    }
    protected void gdview_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {

            if (Convert.ToInt32(e.Row.Cells[6].Text) < 50)
            {
                e.Row.Cells[0].BackColor = System.Drawing.Color.Red;
                e.Row.Cells[0].ForeColor = System.Drawing.Color.White;
                e.Row.Cells[6].BackColor = System.Drawing.Color.Red;
                e.Row.Cells[6].ForeColor = System.Drawing.Color.White;
            }
        }
    }

Однако это дает мне сообщение об ошибке: входная строка имеет неправильный формат. и красный текст с:

if (Convert.ToInt32(e.Row.Cells[6].Text) < 50)

что мне здесь не хватает?

вот код сетки:

<Columns>


        <asp:BoundField HeaderText="Name" DataField="Name" SortExpression="Name" >
            <ItemStyle Height="20px" Width="150px" />
        </asp:BoundField>

        <asp:BoundField HeaderText="ProductCategory " ReadOnly="true" DataField="CategoryName" SortExpression="CategoryNaame" >
            <ItemStyle Height="20px" Width="150px"  />
        </asp:BoundField>

        <asp:BoundField HeaderText="Price" DataField="Price" SortExpression="Price" >
            <ItemStyle Height="20px" Width="150px" />
        </asp:BoundField>

        <asp:ImageField HeaderText ="ImageUrl" DataImageUrlField="ImageUrl" SortExpression="ImageUrl" ReadOnly="true" ControlStyle-Width ="10">

        <ControlStyle Width="50px"></ControlStyle>

        </asp:ImageField>

        <asp:BoundField HeaderText="ProductQuantity" DataField="ProductQuantity" ReadOnly="true" SortExpression="ProductQuantity" >
            <ItemStyle Height="20px" Width="150px" />
        </asp:BoundField>

        <asp:BoundField HeaderText="ProductSold" DataField="ProductSold" SortExpression="ProductSold" ReadOnly="true" >
            <ItemStyle Height="20px" Width="150px" />
        </asp:BoundField>

        <asp:BoundField HeaderText="AvailableStock" DataField="AvailableStock" SortExpression="AvailableStock " ReadOnly="true" >
            <ItemStyle Height="20px" Width="150px" />
        </asp:BoundField>

Поле имени исчезает, когда отображается текстовое поле для редактирования?

вот картинка


person Paolo Duhaylungsod    schedule 01.06.2016    source источник
comment
Каково значение e.Row.Cells[6].Text ?   -  person Mairaj Ahmad    schedule 01.06.2016
comment
@MirajAhmad есть в наличии. внутр. он становится красным, когда достигает менее 20   -  person Paolo Duhaylungsod    schedule 01.06.2016
comment
Я не думаю, что это должно быть пустым при выдаче ошибки. Поместите это перед своим условием if(!string.IsNullOrEmpty(e.Row.Cells[6].Text))   -  person Mairaj Ahmad    schedule 01.06.2016
comment
работал @MirajAhmad, но во всех полях отображается новый текст? я хочу, чтобы редактировались только строки [0] и строки [3], сэр   -  person Paolo Duhaylungsod    schedule 01.06.2016
comment
Что вы подразумеваете под отображением нового текста во всех полях?   -  person Mairaj Ahmad    schedule 01.06.2016
comment
у него есть новое текстовое поле, которое позволяет мне редактировать каждое поле, сэр.   -  person Paolo Duhaylungsod    schedule 01.06.2016
comment
Вы бы добавили текстовое поле для каждого поля в шаблоне редактирования.   -  person Mairaj Ahmad    schedule 01.06.2016
comment
возможно ли редактировать текстовое поле только для определенных полей?   -  person Paolo Duhaylungsod    schedule 01.06.2016
comment
Показать код шаблона редактирования.   -  person Mairaj Ahmad    schedule 01.06.2016
comment
нет этого. так вот чего мне не хватает?   -  person Paolo Duhaylungsod    schedule 01.06.2016
comment
Пожалуйста, покажите код gridview.   -  person Mairaj Ahmad    schedule 01.06.2016
comment
отредактировано сэром @MairajAhmad   -  person Paolo Duhaylungsod    schedule 01.06.2016
comment
@MirajAhmad опубликовал еще один вопрос, не могли бы вы мне помочь, пожалуйста? stackoverflow .com/questions/37569333/   -  person Paolo Duhaylungsod    schedule 01.06.2016


Ответы (1)


Текст в ячейке пуст, который не может быть преобразован в int, поэтому поставьте галочку, если текст не пуст, чем преобразуйте его в int

if(!string.IsNullOrEmpty(e.Row.Cells[6].Text))

Если вы не хотите, чтобы столбец редактировался, установите свойство ReadOnly="true"

ReadOnly="true"

Например, если вы хотите установить этот столбец ReadOnly="true"

<asp:BoundField HeaderText="Name" DataField="Name" SortExpression="Name" ReadOnly="true">
   <ItemStyle Height="20px" Width="150px" />
</asp:BoundField>
person Mairaj Ahmad    schedule 01.06.2016
comment
последний вопрос, сэр. Когда я нажимаю на ссылку обновления, столбец имени исчезает? пожалуйста, посмотрите мой отредактированный вопрос, пожалуйста, и спасибо :) - person Paolo Duhaylungsod; 01.06.2016
comment
да это не сэр. в отличие от столбца цены, значение все еще там. но с именем его не видно, когда появляется текстовое поле редактирования. - person Paolo Duhaylungsod; 01.06.2016
comment
я включил изображение, сэр - person Paolo Duhaylungsod; 01.06.2016