DataGrid学习七

发布时间: 2007-01-24 11:37    作者: 未知    来源: 未知    浏览:    评论

上一例中BoundColumn 控件不是唯一可以在 DataGrid 的 Columns 集合中设置的控件。还可以指定 TemplateColumn,它使您可以完全控制列的内容。模板的内容可以是任意的;在 DataGrid 的列中可以呈现任何内容,包括服务器控件。下面的示例说明如何使用 TemplateColumn 控件将“State”列呈现为下拉列表并将“Contract”列呈现为复选框 HtmlControl。ASP.NET 数据绑定语法用于输出模板中的数据字段值。注意,有一些棘手的逻辑使下拉列表和复选框反射行中的数据状态。



<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<html>
<script language="C#" runat="server">
    SqlConnection myConnection;
    public Hashtable StateIndex;



    protected void Page_Load(Object Src, EventArgs E)
    {
        myConnection = new SqlConnection("user id=sa;password=;initial catalog=pubs;data source=jeff");



        if (!IsPostBack)
            BindGrid();
         StateIndex = new Hashtable();
         StateIndex["CA"] = 0;
         StateIndex["IN"] = 1;
         StateIndex["KS"] = 2;
         StateIndex["MD"] = 3;
         StateIndex["MI"] = 4;
         StateIndex["OR"] = 5;
         StateIndex["TN"] = 6;
         StateIndex["UT"] = 7;
    }



    public int GetStateIndex(String stateName)
    {
        if (StateIndex[stateName] != null)
            return (int)StateIndex[stateName];
        else
            return 0;
    }



    public void MyDataGrid_Edit(Object sender, DataGridCommandEventArgs E)
    {
        MyDataGrid.EditItemIndex = (int)E.Item.ItemIndex;
        BindGrid();
    }



    public void MyDataGrid_Cancel(Object sender, DataGridCommandEventArgs E)
    {
        MyDataGrid.EditItemIndex = -1;
        BindGrid();
    }



    public void MyDataGrid_Update(Object sender, DataGridCommandEventArgs E)
    {
        String updateCmd = "UPDATE Authors SET au_id = @Id, au_lname = @LName, au_fname = @FName, phone = @Phone, "
             + "address = @Address, city = @City, state = @State, zip = @Zip, contract = @Contract where au_id = @Id";
        SqlCommand myCommand = new SqlCommand(updateCmd, myConnection);
        myCommand.Parameters.Add(new SqlParameter("@Id", SqlDbType.NVarChar, 11));
        myCommand.Parameters.Add(new SqlParameter("@LName", SqlDbType.NVarChar, 40));
        myCommand.Parameters.Add(new SqlParameter("@FName", SqlDbType.NVarChar, 20));
        myCommand.Parameters.Add(new SqlParameter("@Phone", SqlDbType.NChar, 12));
        myCommand.Parameters.Add(new SqlParameter("@Address", SqlDbType.NVarChar, 40));
        myCommand.Parameters.Add(new SqlParameter("@City", SqlDbType.NVarChar, 20));
        myCommand.Parameters.Add(new SqlParameter("@State", SqlDbType.NChar, 2));
        myCommand.Parameters.Add(new SqlParameter("@Zip", SqlDbType.NChar, 5));
        myCommand.Parameters.Add(new SqlParameter("@Contract", SqlDbType.NVarChar,1));
        myCommand.Parameters["@Id"].Value = MyDataGrid.DataKeys[(int)E.Item.ItemIndex];
        String[] cols = {"LName","FName","Phone","Address","City","Zip"};
        for (int i=0; i<6; i++)
        {
            String colvalue = ((TextBox)E.Item.FindControl("edit_" + cols[i])).Text;
            // 检查在所需字段中是否有空值
            if (i<3 && colvalue == "")
            {
                Message.InnerHtml = "错误:“姓名”或“电话”不允许使用空值";
                Message.Style["color"] = "red";
                return;
            }
            myCommand.Parameters["@" + cols[i]].Value = colvalue;
        }



        myCommand.Parameters["@State"].Value = ((DropDownList)E.Item.FindControl("edit_State")).SelectedItem.ToString();



        if (((CheckBox)E.Item.FindControl("edit_Contract")).Checked == true)
            myCommand.Parameters["@Contract"].Value = "1";
        else
            myCommand.Parameters["@Contract"].Value = "0";
        myCommand.Connection.Open();
        try
        {
            myCommand.ExecuteNonQuery();
            Message.InnerHtml = "<b>已更新记录</b><br>" + updateCmd;
            MyDataGrid.EditItemIndex = -1;
        }
        catch (SqlException e)
        {
            if (e.Number == 2627)
                Message.InnerHtml = "错误:已存在具有相同主键的记录";
            else
                Message.InnerHtml = "错误:未能更新记录,请确保正确填写了字段";
            Message.Style["color"] = "red";
        }
        myCommand.Connection.Close();
        BindGrid();
    }



    public void BindGrid()
    {
        SqlDataAdapter myCommand = new SqlDataAdapter("select * from Authors", myConnection);
        DataSet ds = new DataSet();
        myCommand.Fill(ds, "Authors");
        MyDataGrid.DataSource=ds.Tables["Authors"].DefaultView;
        MyDataGrid.DataBind();
    }



</script>



<body style="font: 10.5pt 宋体">
  <form runat="server">
    <h3><font face="宋体">更新具有模板列的数据行</font></h3>
    <span id="Message" EnableViewState="false" style="font: arial 11pt;" runat="server"/><p>
    <ASP:DataGrid id="MyDataGrid" runat="server"
      Width="800"
      BackColor="#ccccff"
      BorderColor="black"
      ShowFooter="false"
      CellPadding=3
      CellSpacing="0"
      Font-Name="Verdana"
      Font-Size="8pt"
      HeaderStyle-BackColor="#aaaadd"
      OnEditCommand="MyDataGrid_Edit"
      OnCancelCommand="MyDataGrid_Cancel"
      OnUpdateCommand="MyDataGrid_Update"
      DataKeyField="au_id"
      AutoGenerateColumns="false"
    >



      <Columns>
        <asp:EditCommandColumn EditText="编辑" CancelText="取消" UpdateText="更新"  ItemStyle-Wrap="false"/>
        <asp:BoundColumn HeaderText="au_id" SortExpression="au_id" ReadOnly="True" DataField="au_id" ItemStyle-Wrap="false"/>
        <asp:TemplateColumn HeaderText="au_lname" SortExpression="au_lname">
          <ItemTemplate>
            <asp:Label runat="server" Text="<%# DataBinder.Eval(Container.DataItem, "au_lname") %>"/>
          </ItemTemplate>
          <EditItemTemplate>
            <asp:TextBox runat="server" id="edit_LName" Text="<%# DataBinder.Eval(Container.DataItem, "au_lname") %>"/>
          </EditItemTemplate>
        </asp:TemplateColumn>
        <asp:TemplateColumn HeaderText="au_fname" SortExpression="au_fname">
          <ItemTemplate>
            <asp:Label runat="server" Text="<%# DataBinder.Eval(Container.DataItem, "au_fname") %>"/>
          </ItemTemplate>
          <EditItemTemplate>
            <asp:TextBox runat="server" id="edit_FName" Text="<%# DataBinder.Eval(Container.DataItem, "au_fname") %>"/>
          </EditItemTemplate>
        </asp:TemplateColumn>
        <asp:TemplateColumn HeaderText="phone" SortExpression="phone">
          <ItemTemplate>
            <asp:Label runat="server" Text="<%# DataBinder.Eval(Container.DataItem, "phone") %>"/>
          </ItemTemplate>
          <EditItemTemplate>
            <asp:TextBox runat="server" id="edit_Phone" Text="<%# DataBinder.Eval(Container.DataItem, "phone") %>"/>
          </EditItemTemplate>
        </asp:TemplateColumn>
        <asp:TemplateColumn HeaderText="address" SortExpression="address">
          <ItemTemplate>
            <asp:Label runat="server" Text="<%# DataBinder.Eval(Container.DataItem, "address") %>"/>
          </ItemTemplate>
          <EditItemTemplate>
            <asp:TextBox runat="server" id="edit_Address" Text="<%# DataBinder.Eval(Container.DataItem, "address") %>"/>
          </EditItemTemplate>
        </asp:TemplateColumn>
        <asp:TemplateColumn HeaderText="city" SortExpression="city">
          <ItemTemplate>
            <asp:Label runat="server" Text="<%# DataBinder.Eval(Container.DataItem, "city") %>"/>
          </ItemTemplate>
          <EditItemTemplate>
            <asp:TextBox runat="server" id="edit_City" Text="<%# DataBinder.Eval(Container.DataItem, "city") %>"/>
          </EditItemTemplate>
        </asp:TemplateColumn>
        <asp:TemplateColumn HeaderText="state" SortExpression="state">
          <ItemTemplate>
            <asp:Label runat="server" Text="<%# DataBinder.Eval(Container.DataItem, "state") %>"/>
          </ItemTemplate>
          <EditItemTemplate>
            <asp:DropDownList runat="server" SelectedIndex="<%# GetStateIndex(DataBinder.Eval(Container.DataItem, "state").ToString()) %>" id="edit_State">
                  <asp:ListItem>CA</asp:ListItem>
                  <asp:ListItem>IN</asp:ListItem>
                  <asp:ListItem>KS</asp:ListItem>
                  <asp:ListItem>MD</asp:ListItem>
                  <asp:ListItem>MI</asp:ListItem>
                  <asp:ListItem>OR</asp:ListItem>
                  <asp:ListItem>TN</asp:ListItem>
                  <asp:ListItem>UT</asp:ListItem>
            </asp:DropDownList>
          </EditItemTemplate>
        </asp:TemplateColumn>
        <asp:TemplateColumn HeaderText="zip" SortExpression="zip">
          <ItemTemplate>
            <asp:Label runat="server" Text="<%# DataBinder.Eval(Container.DataItem, "zip") %>"/>
          </ItemTemplate>
          <EditItemTemplate>
            <asp:TextBox runat="server" id="edit_Zip" Text="<%# DataBinder.Eval(Container.DataItem, "zip") %>"/>
          </EditItemTemplate>
        </asp:TemplateColumn>
        <asp:TemplateColumn HeaderText="contract" SortExpression="contract">
          <ItemTemplate>
            <asp:Label runat="server" Text="<%# DataBinder.Eval(Container.DataItem, "contract", "{0}") %>"/>
          </ItemTemplate>
          <EditItemTemplate>
            <asp:CheckBox runat="server" id="edit_Contract" Checked="<%# DataBinder.Eval(Container.DataItem, "contract") %>"/>
          </EditItemTemplate>
        </asp:TemplateColumn>
      </Columns>
    </ASP:DataGrid>
  </form>
</body>
</html>

TAG

Smile Big Smile Surprise Stick out tongue Wink Sad Tongue Tied Indifferent Crying Embarrassed Cool Angry Angel Devil [8-|] [:#] [:-*] [:^)] [<:o)] [|-)] Yes Beer Left Hug Music Star Time Snail Pizza Automobile Umbrella Computer Storm [mo] [8o|] [^o)] [+o(] [*-)] [8-)] Coffee No Drinks [Z] Right Hug Cake Broken Heart Gift Wilted Flower Movie Dog Idea Sleep Email Travel Paradise
呢称:

加粗 斜体 下划线 链接 图片 代码 邮件地址 引用 列表

最多只能输入100个字符

Tags

SQL 数据库 asp.net C# XML 控件 .NET教程 程序 事件 数据 安全 代码 Server 客户端 验证 数据库专栏 接口 文件 Oracle DataSet 函数 DataGrid 问题 .net return C#语言 JavaScript 服务 IIS 对象 语句 windows 继承 时间 web.config 设计 开发 参数 变量 解决 字符 ADO.net 环境 VB.Net语言 web 异常 工具 服务器 计算 实例 OLEDB Application VB Word WebService insert asp net 安装 记录

精华推荐

更多

精品下载

更多