html代码如下:
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<asp:Label ID=id1 Runat=server Text='<%#DataBinder.Eval(Container.DataItem,"id")%>'>
</asp:Label>
<asp:Label ID=num Runat=server Text='<%#DataBinder.Eval(Container.DataItem,"title")%>'>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:Label ID="Label1" Runat=server Text='<%#DataBinder.Eval(Container.DataItem,"id")%>'>
</asp:Label>
<asp:TextBox ID=title Runat=server Text='<%#DataBinder.Eval(Container.DataItem,"id")%>' >
</asp:TextBox>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:EditCommandColumn EditText="编辑" CancelText="取消" UpdateText="更新"></asp:EditCommandColumn>
</Columns>
public void myDatagrid_update(object sender, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{

//myDatagrid.EditItemIndex=e.Item.ItemIndex;
int newsid1=Convert.ToInt32(myDatagrid.DataKeys[e.Item.ItemIndex]);
Response.Write(newsid1+"<BR>");
string newName;
TextBox box;
box = (TextBox)(e.Item.Cells[1].FindControl("title"));
//box = (TextBox)(e.Item.Cells[1].Controls[0]);
newName = box.Text;
string tt=box.ID;
Response.Write(e.Item.Cells[1].FindControl("title")+tt); Response.Write(newName);            System.Data.SqlClient.SqlCommand Objcmd1=new SqlCommand();
Objcmd1.Connection=Objconn;
Objcmd1.CommandText="update news set title='"+newName+"'";// where id='"+newsid1+"'
Objcmd1.ExecuteNonQuery();
            myDatagrid.EditItemIndex=-1;
grid_bind();
}为什么编辑的时候总不能取到title更改后的值,总是原来的那个值!帮帮我!

解决方案 »

  1.   

    box = (TextBox)(e.Item.FindControl("title"));
    这样试试看
      

  2.   

    html代码:
    <asp:DataGrid id="myDatagrid" OnCancelCommand="myDatagrid_cancle" OnEditCommand="myDatagrid_edit"
    OnUpdateCommand="myDatagrid_update" AutoGenerateColumns="False" style="Z-INDEX: 101; LEFT: 328px; POSITION: absolute; TOP: 40px"
    runat="server">
    <Columns>
    <asp:TemplateColumn>
    <ItemTemplate>
    <asp:Label ID=id1 Runat=server Text='<%#DataBinder.Eval(Container.DataItem,"id")%>'>
    </asp:Label>
    <asp:Label ID=num Runat=server Text='<%#DataBinder.Eval(Container.DataItem,"title")%>'>
    </asp:Label>
    </ItemTemplate>
    <EditItemTemplate>
    <asp:Label ID="Label1" Runat=server Text='<%#DataBinder.Eval(Container.DataItem,"id")%>'>
    </asp:Label>
    <asp:TextBox ID="title" AutoPostBack="True" Runat="server"></asp:TextBox>
    </EditItemTemplate>
    </asp:TemplateColumn>
    <asp:EditCommandColumn EditText="编辑" CancelText="取消" UpdateText="更新"></asp:EditCommandColumn>
    </Columns>
    </asp:DataGrid>CS:public void myDatagrid_edit(object sender, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {

    myDatagrid.EditItemIndex=e.Item.ItemIndex;
                grid_bind();
    }
    public void myDatagrid_update(object sender, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {

    //myDatagrid.EditItemIndex=e.Item.ItemIndex;
    int newsid1=Convert.ToInt32(myDatagrid.DataKeys[e.Item.ItemIndex]);
    //Response.Write(newsid1+"<BR>");
    string newName;
    TextBox title;
    //box = (TextBox)(e.Item.Cells[0].FindControl("title"));
    //box = (TextBox)(e.Item.FindControl("title"));
    title =(TextBox)(e.Item.FindControl("title"));
    //string tt=box.ID;
    newName=title.Text;
    //Response.Write(e.Item.Cells[1].FindControl("title")+tt);
               // e.Item.FindControl("title").
    Response.Write(newName);            System.Data.SqlClient.SqlCommand Objcmd1=new SqlCommand();
    Objcmd1.Connection=Objconn;
    Objcmd1.CommandText="update news set title='"+newName+"'";// where id='"+newsid1+"'
    Objcmd1.ExecuteNonQuery();
                myDatagrid.EditItemIndex=-1;
    grid_bind();
    }
    public void myDatagrid_cancle(object sender, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {

    myDatagrid.EditItemIndex=-1;
    grid_bind();
    } } }
    总是不能取到输入到textbox中的新值!怎么回事?郁闷很久啦,快帮帮我吧!
      

  3.   

    public void myDatagrid_update(object sender, System.Web.UI.WebControls.DataGridCommandEventArgs e)似乎不能激发你的TextBox中的内容向数据库中写入,DataGrid中编辑列自带的有TextBox就可以实现你的功能,干吗还要自己在做个摸板列呀@!
      

  4.   

    自己发现问题啦,原来是page_load的时候给原来的那个值那冲啦,又绑定了一次!
      

  5.   

    把你的数据绑定代码放在Page_Load方法的if(!Page.IsPostBack)块中。
      

  6.   

    html代码:
    <asp:DataGrid id="myDatagrid" OnCancelCommand="myDatagrid_cancle" OnEditCommand="myDatagrid_edit"
    OnUpdateCommand="myDatagrid_update"   OnItemDataBound="DataGrid1_ItemDataBound" AutoGenerateColumns="False" style="Z-INDEX: 101; LEFT: 144px; POSITION: absolute; TOP: 32px"
    runat="server" ShowHeader="True">
    <Columns>
    <asp:TemplateColumn HeaderText="id号">
    <ItemTemplate>
    <table border="2">
    <tr>
    <td>
    <asp:Label ID=id1 Runat=server Text='<%#DataBinder.Eval(Container.DataItem,"id")%>'>
    </asp:Label>
    </td>
    <td>
    <asp:Label ID=title1 Runat=server Text='<%#DataBinder.Eval(Container.DataItem,"title")%>'>
    </asp:Label>
    </td>
    <td>
    <asp:Label ID=tiem Runat=server Text='<%#DataBinder.Eval(Container.DataItem,"dateandtime")%>'>
    </asp:Label>
    </td>
    <td>
    <asp:Label ID="Label1" Runat=server Text='<%#DataBinder.Eval(Container.DataItem,"news_type")%>'>
    </asp:Label>
    </td>
    </tr>
    </table>
    </ItemTemplate>
    <EditItemTemplate>
    <asp:Label ID=id2 Runat=server Text='<%#DataBinder.Eval(Container.DataItem,"id")%>'>
    </asp:Label>
    <asp:TextBox ID=title Runat=server Text='<%#DataBinder.Eval(Container.DataItem,"title")%>'>
    </asp:TextBox>
    <asp:TextBox ID=time1 Runat=server Text='<%#DataBinder.Eval(Container.DataItem,"dateandtime")%>'>
    </asp:TextBox>
    <asp:DropDownList ID="list" Runat="server">
    <asp:ListItem Value="2">重点</asp:ListItem>
    <asp:ListItem Value="1">普通</asp:ListItem>
    <asp:ListItem Value="0">一般</asp:ListItem>
    </asp:DropDownList>
    </EditItemTemplate>
    </asp:TemplateColumn>
    <asp:EditCommandColumn ButtonType="LinkButton" UpdateText="更新" CancelText="取消" EditText="编辑"></asp:EditCommandColumn>
    </Columns>cs:部分
    public void myDatagrid_edit(object sender, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {

    myDatagrid.EditItemIndex=e.Item.ItemIndex;
                grid_bind();
    }public void DataGrid1_ItemDataBound(object source, DataGridItemEventArgs e)
    {
    if(e.Item.ItemIndex>=0)
    {
    if (e.Item.ItemIndex ==myDatagrid.EditItemIndex) 
    {
    int newsid2=Convert.ToInt32(myDatagrid.DataKeys[e.Item.ItemIndex]);
    SqlCommand Objcmd2=new SqlCommand();
    Objcmd2.Connection=Objconn;
    Objcmd2.CommandText="select news_type,title from news where id='"+newsid2+"'";
    System.Data.SqlClient.SqlDataReader Objreader=Objcmd2.ExecuteReader();


    while (Objreader.Read())
    { DropDownList list = (DropDownList)e.Item.FindControl("news_type"); string type2=Objreader.GetValue(1).ToString();
    Response.Write("zhou"+type2+"zhou"+"<BR>");
    Response.Write(type2.GetHashCode().ToString()); //for(int i=0; i<2; i++) 
    //{
    //list.Items.Add("Item" + i.ToString());
    //if((type2.ToString().Equals(list.Items.FindByValue("0"))))
    // list.SelectedIndex = i;
    //for(int i=0;i<2;i++)
    //{
    //if (Convert.ToInt32(list.Items.Count)==2)
    //list.SelectedIndex =1;
            //list.SelectedItem
    //
    //}


    }
    Objreader.Close();


    }

         }

    我想在当点击编辑的时候,出现的dropdownlist选中的项有数据库中确定.也就是当数据库中是1是,编辑的时候开始是普通被选中.该怎么处理???
      

  7.   

    while (Objreader.Read())
    {
       ((DropDownList)e.Item.FindControl("news_type")).selectValue = Objreader.GetValue(0).ToString();
    }
    这样应该可以。
      

  8.   

    test.aspx
    ----------------------------------------------
    <%@Page debug=true%>
    <%@Import Namespace="System.Data"%>
    <script runat="server" Language="C#">
    void Page_Load(object src,EventArgs e){
    if(!Page.IsPostBack){
    BindData();
    }
    }void BindData(){
    DataTable table=(DataTable)Cache["testTable"];
    if(table==null){
    table=new DataTable();
    table.Columns.Add(new DataColumn("姓名",typeof(string)));
    table.Columns.Add(new DataColumn("性别",typeof(bool)));
    table.Columns.Add(new DataColumn("年龄",typeof(int)));
    DataRow row;
    Random rdm=new Random();
    int rint;
    for(int i=0;i<10;i++){
    rint=rdm.Next(20,30);
    row=table.NewRow();
    row["姓名"]="姓名_"+i.ToString();
    row["性别"]=(rint%3==0);
    row["年龄"]=rint;
    table.Rows.Add(row);
    }
    Cache["testTable"]=table;
    }
    grid1.DataSource=table;
    grid1.DataBind();
    }void EditGrid(object src,DataGridCommandEventArgs e){
    grid1.EditItemIndex=e.Item.ItemIndex;
    BindData();
    }void CancelEdit(object src,DataGridCommandEventArgs e){
    grid1.EditItemIndex=-1;
    BindData();
    }void UpdateGrid(object src,DataGridCommandEventArgs e){
    grid1.EditItemIndex=-1;
    BindData();
    }void BindItem(object src,DataGridItemEventArgs e){
    if(e.Item.ItemType==ListItemType.EditItem){
    DropDownList ddl=(DropDownList)e.Item.FindControl("ageddl");
    if(ddl!=null){
    ListItem litem;
    for(int i=20;i<=30;i++){
    litem=new ListItem(i.ToString());
    ddl.Items.Add(litem);
    if(i==(int)((DataRowView)e.Item.DataItem)["年龄"])
    litem.Selected=true;
    }
    }
    }
    }
    </script>
    <HTML>
    <HEAD>
    <TITLE> Webdiyer 制造:) (www.webdiyer.com) </TITLE>
    <META NAME="Generator" CONTENT="EditPlus">
    <META NAME="Author" CONTENT="Webdiyer">
    </HEAD><BODY>
    <form runat="server">
    <asp:DataGrid runat="server" id="grid1" width="50%" AutoGenerateColumns=false OnEditCommand="EditGrid" OnCancelCommand="CancelEdit" OnUpdateCommand="UpdateGrid" OnItemDataBound="BindItem">
    <Columns>
    <asp:EditCommandColumn EditText="编辑" CancelText="取消" UpdateText="更新" HeaderText="编辑"/>
    <asp:BoundColumn DataField="姓名" HeaderText="姓名"/>
    <asp:TemplateColumn HeaderText="性别">
    <ItemTemplate>
    <%#(bool)((DataRowView)Container.DataItem)["性别"]==true?"男":"女"%>
    </ItemTemplate>
    <EditItemTemplate>
    <asp:CheckBox runat="server" id="sex" Checked=<%#(bool)((DataRowView)Container.DataItem)["性别"]==true%>/>
    </EditItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="年龄">
    <ItemTemplate>
    <%#DataBinder.Eval(Container.DataItem,"年龄")%>
    </ItemTemplate>
    <EditItemTemplate>
    <asp:DropDownList runat="server" id="ageddl"/>
    </EditItemTemplate>
    </asp:TemplateColumn>
    </Columns>
    </asp:DataGrid>
    <br>
    <asp:Label runat="server" id="lbl"/>
    </form>
    </BODY>
    </HTML>