<asp:datagrid id="gzyj" OnCancelCommand="gzyjCancelCommand" OnUpdateCommand="gzyjUpdateCommand" OnEditCommand="gzyjEditCommand" OnItemCreated="ItemCreated" DataKeyField="gzyjid" font-names="verdana"font-size="X-Small" BorderWidth="1px" BorderColor="Black" BorderStyle="Solid" CellPadding="2" BackColor="White" CssClass="Shadow" AutoGenerateColumns="False" Runat="server"> <EditItemStyle Font-Bold="True" BackColor="Yellow"></EditItemStyle> <AlternatingItemStyle BackColor="PaleGoldenrod"></AlternatingItemStyle> <ItemStyle BackColor="Beige"></ItemStyle> <Columns> <asp:TemplateColumn HeaderText="工作业绩">
<HeaderStyle HorizontalAlign="Center" Width="330px" BackColor="#3399FF"> <ItemTemplate>
<asp:label runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "yj") %>'/>
</ItemTemplate>
<EditItemTemplate>
<asp:textbox runat="server" width="80px" id="txtyj" Text='<%# DataBinder.Eval(Container.DataItem, "yj") %>'/> ///这一句里面的width=就行了............ </EditItemTemplate> </asp:TemplateColumn>
<asp:EditCommandColumn ButtonType="LinkButton" UpdateText="&lt;img src=images/ok.gif border=0 align=absmiddle alt='保存'&gt;"
CancelText="&lt;img src=images/cancel.gif border=0 align=absmiddle alt='取消'&gt;" EditText="&lt;img src=images/edit.gif border=0 align=absmiddle alt='编辑'&gt;">
<ItemStyle HorizontalAlign="Center" BackColor="Yellow"></ItemStyle>
</asp:EditCommandColumn>
</Columns>
</asp:datagrid>.cs里面用以下更新
public void gzyjUpdateCommand(Object sender, DataGridCommandEventArgs e)
{
TextBox txtyj= (TextBox) e.Item.FindControl("txtyj");
string sb ="UPDATE gzyj SET yj=@yj WHERE gzyjid=@nid"; SqlConnection conn = new SqlConnection(publicDB.strConn);
SqlCommand cmd = new SqlCommand(sb, conn); SqlParameter p1 = new SqlParameter("@nid", SqlDbType.Int);
p1.Direction = ParameterDirection.Input;
p1.Value = gzyj.DataKeys[e.Item.ItemIndex];
cmd.Parameters.Add(p1); SqlParameter p2 = new SqlParameter("@yj", SqlDbType.NVarChar, 30);
p2.Direction = ParameterDirection.Input;
p2.Value = txtyj.Text.Trim();
cmd.Parameters.Add(p2);
try
{
conn.Open();
cmd.ExecuteNonQuery();
Response.Write("<script>alert('执行成功!');</script>");
}
catch(Exception ex)
{
Response.Write("<script language=javascript>alert('"+ex.Message.Replace("'","'")+"');</script>");
}
finally
{

}
conn.Close();
gzyjFindData(); gzyj.EditItemIndex = -1;

//刷新表格
int pageKey = gzyj.CurrentPageIndex;
gzyjBindData(pageKey);
}

解决方案 »

  1.   

    datagrid 的Dock 属性可以调试
      

  2.   

    哈哈,你很走运,我刚解决了这个问题,在ItemDataBound里面加如下代码,我的是第二列,模板列。
    这个示例可根据文本长度动态控制文本框长度。我研究了好半天才做出来的,别忘了把分给我!
    -----------------------------------------------------------------------------------------
    if(e.Item.ItemType == ListItemType.EditItem)
    {
     if(e.Item.Controls[1].Controls[1].GetType().ToString() == "System.Web.UI.WebControls.TextBox")
     {
        TextBox tb = (TextBox)e.Item.Controls[1].Controls[1];
        int tbwidth=tb.Text.Trim().Length*20;
    if(tbwidth<380)
    tb.Width   = Unit.Parse((tb.Text.Trim().Length*15).ToString()+"px");
    else
    tb.Width   = Unit.Parse("380px");
        tb.Attributes.Add("style","border-color:#000040;border-width:1px;border-style:Solid;");
    tb.Text    = Server.HtmlDecode(tb.Text);
     }     
    }
    ----------------------------------------------------------------------------------------
      

  3.   

    倒了,在VS中直接在DATAGRID里点一下不就得了。不光TEXTBOX,其他比如DDL也都能放,模版列就是好呀。
      

  4.   

    那请问怎么做这样的效果
    点击DataGrid的单元格,单元格里面就变成文本框,修改里面的数据,
    点击别的单元格里面的刚才的数据被修改
    类似Excel
      

  5.   

    width="80px" 在TextBox的Width属性可以设置。