开发者

Grid view Updatearguments does Not contain New Values

开发者 https://www.devze.com 2023-02-06 07:08 出处:网络
public partial class Gridvw_expt2 : System.Web.UI.Page { SqlCommand c开发者_开发技巧om; SqlDataAdapter da;
public partial class Gridvw_expt2 : System.Web.UI.Page
{
   SqlCommand c开发者_开发技巧om;
   SqlDataAdapter da;
   DataSet ds;
   SqlConnection con=new SqlConnection(ConfigurationManager.ConnectionStrings["gj"].ConnectionString);
protected void Page_Load(object sender, EventArgs e)
{


    com = new SqlCommand("Select * from tblExpt",con);
    da = new SqlDataAdapter(com);
    ds = new DataSet();
    da.Fill(ds);
    if (ds.Tables[0].Rows[0] != null)
    {
        GridView1.AutoGenerateEditButton = true; 
        GridView1.DataSource = ds;
        GridView1.DataBind();
        GridView1.RowUpdating += new GridViewUpdateEventHandler(GridView1_RowUpdating);
        GridView1.DataKeyNames = new string[] { "id" };
        GridView1.RowEditing += new GridViewEditEventHandler(GridView1_RowEditing);

    }
    else
        Response.Write("fkj");
}

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    GridViewRow row = GridView1.Rows[e.RowIndex];
    int id = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Value);

    string cls = ((TextBox)(row.Cells[2].Controls[0])).Text;
    string nam = ((TextBox)(row.Cells[3].Controls[0])).Text;
    foreach (DictionaryEntry entry in e.NewValues)
    {
        e.NewValues[entry.Key] = Server.HtmlEncode(entry.Value.ToString());
    }
    com = new SqlCommand("Update tblExpt set name='" + nam + "',class='" + cls + "' where id='" + id + "'", con);
    da = new SqlDataAdapter(com);
    GridView1.EditIndex = -1;
    GridView1.DataSource = ds;
    GridView1.DataBind();
}
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
    GridView1.EditIndex = e.NewEditIndex;
    GridView1.DataSource = ds;
    GridView1.DataBind();
}

}

In the above code when i try to access e.new values index out of range exception is thrown.

The table being accessed contains 3 fields id, class, name Please help to solve the problem.


Read this blog post I wrote on extracting data from gridview (and other data controls). Also, in .net 4.0 if you use 2 way binding (<# Bind("") #>) e.NewValues will be populated.

More info here: http://weblogs.asp.net/davidfowler/archive/2008/12/12/getting-your-data-out-of-the-data-controls.aspx


The exception you get is because row.Cells[0].Controls[0] is a DataControlLinkButton and not a TextBox. Since I don´t know the control layout of your grid you could search for your textbox instead.

Instead of:

int id = int.Parse(((TextBox)(row.Cells[0].Controls[0])).Text);

do something like the code below if there is only one TextBox per row:

TextBox box = (TextBox)row.Cells[0].Controls.OfType<TextBox>().First();
int id = int.Parse( box.Text );

If you have nested html and hierarchies check out this SO question for nested searching of controls

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号