2016-06-01 18 views
0

オブジェクト参照がオブジェクトのインスタンスに設定されていません。赤いテキストは次のとおりです。編集テンプレートを使用して、gridviewの特定のフィールドのみを編集します。

dt.Rows[row.RowIndex]["Name"] = Name; 

私のグリッドビューでデータを編集したいです。ここに私のコードは次のとおりです。ここ

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 OnRowEditing(object sender, GridViewEditEventArgs e) 
{ 
    gdview.EditIndex = e.NewEditIndex; 
    this.GetProducts(0); 
} 

はgetproducts(ある)

private void GetProducts(int CategoryID) 
{ 
    ShoppingCart k = new ShoppingCart() 
    { 
     CategoryID = CategoryID 
    }; 
    gdview.DataSource = null; 
    gdview.DataSource = k.GetAllProducts(); 
    gdview.DataBind(); 
} 

私はここで何をしないのですか?

もう1つの質問です。更新リンクをクリックすると、名前、価格フィールドに編集テキストボックスが表示されます。しかし、その名前の価値はありませんか?ここにスクリーンショットがあります。ここ

は私のhtmlコードです:

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

     <asp:TemplateField> 
    <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> 
+0

-----------------この

if (!Page.IsPostBack) { try { gdview.DataSource = SqlDataSource1; gdview.DataBind(); DataView dv = (DataView)SqlDataSource1.Select(DataSourceSelectArguments.Empty); DataTable dt = new DataTable(); dt = dv.ToTable(); ViewState["dt"] = dt; } catch(Exception ex) { } } 

でコードをご確認くださいエラーが発生した時点でnullではありません。 – Mairaj

+0

編集用のテキストボックスに何かを入力すると、@MairajAhmad –

答えて

0

まずあなたがウルビューステートへのデータテーブルを割り当てる必要があります。フィールドの値を更新することができます。

参考までに、私はsqldatasourceオブジェクトによってgridviewをバインドしました。

uはその `dt`を確認することができ、あなたの他の方法

private void GetProducts(int CategoryID) 
{ 
    ShoppingCart k = new ShoppingCart() 
    { 
     CategoryID = CategoryID 
    }; 
    gdview.DataSource = null; 
    gdview.DataSource = ViewState["dt"]; 
    gdview.DataBind(); 
} 
+0

のどこにk.getallproductsというエラーがスローされますか? –

+0

はい、gdview.Datasource = k.getallproducts();行で使用できます。しかし、k.getallproducts()内のviewstateを更新する必要があるため、更新されたレコードをgridviewで取得できます。 – Debiprasad

+0

は理解できません。あなたは更新された回答plsを投稿できますか? –

関連する問題