edit only specific fields in gridview using edit template

青春壹個敷衍的年華 提交于 2019-12-12 03:44:56

问题


i am having an error : Object reference not set to an instance of an object. and the red text is:

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

i want to edit data in my gridview. here is my code:

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

here is the getproducts()

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

what am i missing here?

Another question. When i click on the update link, it shows the edit textbox on the Name, and Price fields. But the value on the name is not there? here is a screenshot.

here is my html 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>

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

回答1:


First you have to assign the datatable to ur viewstate. then you can able to update the value of the field.

FYI, I have bind the gridview by sqldatasource object.

Please check the code with this

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

-----------------your other method

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


来源:https://stackoverflow.com/questions/37569333/edit-only-specific-fields-in-gridview-using-edit-template

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!