编辑DataGrid控件(二)

上一章我们就DataGrid控件的就地编辑进行详细的讨论,你也许会抱怨DataGrid控件的就地编辑有很多的不足,比如:不能编辑Employee Name的模板列,比如对编辑的列不能使用选择列表等等的问题。是的,上一章的就地编辑是DataGrid控件最简单也是最基础的介绍,如果你看了本章的内容,对上一章的还存在的抱怨就会少一些。下面各章是对前面的不断的补充,请继续关注!

本章我们将介绍:用模板进行就地编辑。 

那是如何实现的呢,请向下看:

Edit2.aspx

 <!--DataKeyField="EmployeeID"为指定表的主键 -->
<asp:datagrid id="DataGrid1" DataKeyField="EmployeeID" Font-Size="12px" Font-Name="Verdana" BorderWidth="1px"
    BorderStyle="Solid" BorderColor="black" AutoGenerateColumns="False" CellSpacing="0" CellPadding="2"
    Runat="server">
    <HeaderStyle BackColor="brown" />
    <AlternatingItemStyle BackColor="palegoldenrod" />
    <ItemStyle BackColor="beige"></ItemStyle>
    <Columns>
     <asp:BoundColumn DataField="EmployeeID" HeaderText="ID" ReadOnly="True" />
     <asp:TemplateColumn HeaderText="Employee Name">
                                         <!-- 模板列的设置 --> 
      <ItemTemplate>
       <%#DataBinder.Eval(Container.DataItem,"TitleOfCourtesy")+"<b>"+
        DataBinder.Eval(Container.DataItem,"FirstName")+"</b>"+
        DataBinder.Eval(Container.DataItem,"LastName")%>
      </ItemTemplate>
                                          <!-- 模板列编辑项的设置 -->
          <EditItemTemplate>
       <asp:DropDownList Runat=server ID=ddTitles Width=50px DataSource='<%#aTitleOfCourtesy %>' />
       <asp:TextBox Runat=server ID=txtFirstName Width=80px Text='<%#DataBinder.Eval(Container.DataItem,"FirstName")%>' />
       <asp:TextBox Runat=server ID=txtLastName Width=100px Text='<%#DataBinder.Eval(Container.DataItem,"LastName")%>' />
      </EditItemTemplate>
     </asp:TemplateColumn>
     <asp:BoundColumn DataField="title" HeaderText="Position" />
     <asp:BoundColumn DataField="Country" HeaderText="From" />
                                        <!-- 在这里对编辑列用图像来替代文本 -->
     <asp:EditCommandColumn ButtonType="LinkButton" EditText='<img src=Images/edit.gif border=0 align=middle>'
      CancelText='<img src=images/cancel.gif border=0 align=middle alt=Cancel>' UpdateText='<img src=images/ok.gif  border=0 align=middle alt=ok>'>
                                          <!-- 在这里对编辑列的风格进行设置 -->
      <ItemStyle BackColor="lightblue" Width="15px" />
     </asp:EditCommandColumn>
    </Columns>
   </asp:datagrid>


Edit2.aspx.cs:
private void Page_Load(object sender, System.EventArgs e)
  {
   // 在此处放置用户代码以初始化页面
   if (!Page.IsPostBack)
   {
    OnDataLoad();
   }
  }
               

                //将表中的记录fill到DataSet中,并将其绑定到DataGrid控件中
  private void OnDataLoad()
  {
          SqlConnection cn=new SqlConnection("DATABASE=Northwind;SERVER=localhost;UID=sa;PWD=;");
    string strsql="SELECT employeeid, titleofcourtesy, firstname, lastname, title, country FROM Employees";
    SqlDataAdapter da=new SqlDataAdapter(strsql,cn);
    DataSet ds=new DataSet();
    da.Fill(ds,"MyTable");
    DataGrid1.DataSource=ds.Tables["MyTable"];
    DataGrid1.DataBind();
  }

              private void DataGrid1_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
  {
    DataGrid1.EditItemIndex=e.Item.ItemIndex;
    OnDataLoad();
  }

  private void DataGrid1_CancelCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
  {
   DataGrid1.EditItemIndex=-1;
   OnDataLoad();
  }

  private void DataGrid1_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
  {
   int iPosition=2;
   int iFrom=3;
   TextBox txtPosition=(TextBox)e.Item.Cells[iPosition].Controls[0];
   TextBox txtFrom=(TextBox)e.Item.Cells[iFrom].Controls[0];
   TextBox txtFirstName=(TextBox)e.Item.FindControl("txtFirstName");
   TextBox txtLastName=(TextBox)e.Item.FindControl("txtLastName");
   DropDownList ddTitles=(DropDownList)e.Item.FindControl("ddTitles");

   StringBuilder sb=new StringBuilder();
   sb.Append("Update Employees set ");
   sb.Append("
TitleOfCourtesy=@TitleOfCourtesy,FirstName=@FirstName,");
   sb.Append("
LastName=@LastName,Title=@Title,Country=@Country ");
   sb.Append("where
EmployeeID=@EmployeeID");
   SqlConnection cn=new SqlConnection("DATABASE=Northwind;SERVER=localhost;UID=sa;PWD=;");
   SqlCommand cmd=new SqlCommand(sb.ToString(),cn);

            SqlParameter p1=new SqlParameter("@EmployeeID",SqlDbType.Int);
   p1.Direction=ParameterDirection.Input;
   p1.Value=DataGrid1.DataKeys[e.Item.ItemIndex];
   cmd.Parameters.Add(p1);
  
   SqlParameter p2=new SqlParameter("@TitleOfCourtesy",SqlDbType.NVarChar,25);
   p2.Direction=ParameterDirection.Input;
   p2.Value=ddTitles.SelectedItem.Text;
   cmd.Parameters.Add(p2);

   SqlParameter p3=new SqlParameter("@FirstName",SqlDbType.NVarChar,10);
   p3.Direction=ParameterDirection.Input;
   p3.Value=txtFirstName.Text;
   cmd.Parameters.Add(p3);

   SqlParameter p4=new SqlParameter("@LastName",SqlDbType.NVarChar,20);
   p4.Direction=ParameterDirection.Input;
   p4.Value=txtLastName.Text;
   cmd.Parameters.Add(p4);

   SqlParameter p5=new SqlParameter("@Title",SqlDbType.NVarChar,30);
   p5.Direction=ParameterDirection.Input;
   p5.Value=txtPosition.Text;
   cmd.Parameters.Add(p5);

            SqlParameter p6=new SqlParameter("@Country",SqlDbType.NVarChar,15);
   p6.Direction=ParameterDirection.Input;
   p6.Value=txtFrom.Text;
   cmd.Parameters.Add(p6);

   cn.Open();
   cmd.ExecuteNonQuery();
   cn.Close();

   DataGrid1.EditItemIndex=-1;
   OnDataLoad();
  }

                //点击编辑图像时,这里会有一个反常之处:在下拉列表中所选择的项与雇员的信息不匹配,所以要在这里初始化编辑模板
                //中的子控件状态
  private void DataGrid1_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
  {
   ListItemType lItem=e.Item.ItemType;
   if (lItem==ListItemType.EditItem)
   {
    DropDownList ddTitles=(DropDownList)e.Item.FindControl("ddTitles");
    DataRowView dr=(DataRowView)e.Item.DataItem;
    if (dr!=null)
    {
     ddTitles.SelectedIndex=Array.IndexOf(aTitleOfCourtesy,dr["titleofcourtesy"].ToString());
    }
   }
  }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值