2016-06-01 3 views
0

Ich habe eine Viewproducts-Seite und was ich will ist, wenn Sie auf den Link Bearbeiten klicken, werden zwei Felder bearbeitet (Name und Preis). hier ist mein HTML-Code:Aktualisieren von Daten in boundfield (Eingabe String war nicht in einem korrekten Format.)

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

und Code hinter:

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

Doch es mir eine Fehlermeldung gibt zu sagen: Eingabezeichenfolge nicht in einem korrekten Format war. und der rote Text ist mit:

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

was fehle ich hier?

hier ist der gridview Code:

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

Das Namensfeld verschwindet, wenn das Textfeld für die Bearbeitung zu sehen ist?

here is the picture

+0

Was Wert von 'e.Row.Cells ist [6] .Text'? – Mairaj

+0

@MairajAhmad verfügbar. int. es wird rot, wenn es weniger als 20 –

+0

erreicht Ich glaube nicht, dass dies leer werden muss, wenn Fehler geworfen wird. Setzen Sie dies vor Ihre Bedingung 'if (! String.IsNullOrEmpty (e.Row.Cells [6] .Text))' – Mairaj

Antwort

0

Der Text in Zelle leer ist, die so zu int konvertiert werden können einen Scheck setzen, wenn Text leer in nicht als int

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

zu konvertieren Wenn Sie nicht wollen, eine Spalte bearbeitet, um eine Immobilie ReadOnly="true"

ReadOnly="true" 

zum Beispiel zu machen, wenn Sie wollen se t dieses coulmn ReadOnly="true"

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

letzte Frage Sir. Wenn ich auf den Update-Link klicke, verschwindet die Namensspalte? bitte sehen Sie meine bearbeitete Frage bitte und danke :) –

+0

Stellen Sie sicher, dass es nicht auf Nur lesen gesetzt ist. – Mairaj

+0

Ja, es ist nicht Sir. Anders als in der Preisspalte ist der Wert immer noch da. aber mit dem Namen, ist es nicht sichtbar, wenn das Bearbeitungsfeld angezeigt wird. –

Verwandte Themen