2016-06-01 8 views
0

У меня есть страница viewproducts, и я хочу, когда вы нажимаете на ссылку редактирования, будут отредактированы два поля (имя и цена). вот мой HTML код:Обновление данных в boundfield (строка ввода не была в правильном формате.)

<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) 

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

вот GridView код:

<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> 

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

here is the picture

+0

Что такое значение 'e.Row.Cells [6] .Text'? – Mairaj

+0

@MairajAhmad имеющиеся в наличии. внутр. он становится красным, когда он достигает менее 20 –

+0

. Я не думаю, что это должно быть пустым при метании ошибки. Поместите это перед вашим условием 'if (! String.IsNullOrEmpty (e.Row.Cells [6] .Text))' – Mairaj

ответ

0

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

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

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

ReadOnly="true" 

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

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

последний вопрос сэр. Когда я нажимаю на ссылку обновления, столбцы имен исчезают? пожалуйста, см. мой отредактированный вопрос, пожалуйста и спасибо :) –

+0

Убедитесь, что он не установлен для чтения. – Mairaj

+0

да его не сэр. в отличие от столбца цены, значение все еще существует. но с именем, его не видно, когда появляется текстовое поле редактирования. –