none
datalist 项模板问题: RRS feed

  • 问题

  • 有这样一个需求:datalist 项模板里面有个button 按钮 text=“标记答案” 当我点击button 的时候,此项被标记为答案:然后text=“已标为答案”  就像本论坛的那种,应该怎么实现呢?谢谢啦,如果这样达不到效果的话,请指点一下其它的方法吧:


    小吴
    2009年5月1日 0:34

答案

  • 在ItemDataBound事件里,通过FindControl找到Button,根据数据库的值设置 Text
    【孟子E章】
    2009年5月1日 5:47
    版主
  • <%@ Page Language="C#" Debug="true" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <script runat="server">
    
     
      System.Data.DataView CreateDataSourceByXianhuiMeng()
      {
        System.Data.DataTable dt = new System.Data.DataTable();
        System.Data.DataRow dr;
        dt.Columns.Add(new System.Data.DataColumn("学生班级", typeof(System.String)));
        dt.Columns.Add(new System.Data.DataColumn("学生姓名", typeof(System.String)));
        dt.Columns.Add(new System.Data.DataColumn("语文", typeof(System.Decimal)));
        dt.Columns.Add(new System.Data.DataColumn("数学", typeof(System.Decimal)));
        dt.Columns.Add(new System.Data.DataColumn("英语", typeof(System.Decimal)));
        dt.Columns.Add(new System.Data.DataColumn("计算机", typeof(System.Decimal)));
    
        for (int i = 0; i < 8; i++)
        {
          System.Random rd = new System.Random(Environment.TickCount * i); ;
          dr = dt.NewRow();
          dr[0] = "班级" + i.ToString();
          dr[1] = "【孟子E章】" + i.ToString();
          dr[2] = System.Math.Round(rd.NextDouble() * 100, 2);
          dr[3] = System.Math.Round(rd.NextDouble() * 100, 2);
          dr[4] = System.Math.Round(rd.NextDouble() * 100, 2);
          dr[5] = System.Math.Round(rd.NextDouble() * 100, 2);
          dt.Rows.Add(dr);
        }
        System.Data.DataView dv = new System.Data.DataView(dt);
        return dv;
      }
    
    
      protected void Page_Load(object sender, EventArgs e)
      {
        if (!Page.IsPostBack)
        {
          DataList1.DataSource = CreateDataSourceByXianhuiMeng();
          DataList1.DataBind();
        }
      }
    
      protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
      {
        if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
        {
          System.Data.DataRowView dr = e.Item.DataItem as System.Data.DataRowView;
          if (System.Decimal.Parse(dr["语文"].ToString()) > 60)
          {
            (e.Item.FindControl("button1") as Button).Text = "已经标记为答案";
          }
        }
    
      }
    
      protected void button1_Click(object sender, EventArgs e)
      {
        (sender as Button).Text = "已经标记为答案";
      }
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
      <title></title>
    </head>
    <body>
      <form id="form1" runat="server">
      <asp:DataList ID="DataList1" runat="server" OnItemDataBound="DataList1_ItemDataBound">
        <ItemTemplate>
          <asp:Button ID="button1" runat="server" Text="标记为答案" OnClick="button1_Click" />
        </ItemTemplate>
      </asp:DataList>
      </form>
    </body>
    </html>
    

    【孟子E章】
    2009年5月1日 5:58
    版主
  • 楼主,你好

    除了孟老师说的这种做法外,你也可以通过直接绑定数据库状态表示,假设如果该答案已被标记为答案,状态为TRUE,否则为false。
    e.g

    public string BindState(object o)
    {
        if(Convert.ToBoolean(o)==true)
       {

         return "已标为答案";
       }
      else
       return "标记答案;"
    }


    <asp:DataList ID="DataList1" runat="server" OnItemDataBound="DataList1_ItemDataBound">
        <ItemTemplate>
          <asp:Button ID="button1" runat="server" Text='<%#BindState(Eval("State")) %>'/>
        </ItemTemplate>
      </asp:DataList>


    Microsoft Online Community Support
    2009年5月4日 2:53

全部回复

  • 你好,请参考

    <ItemTemplate>
        <asp:LinkButton ID="LinkButton1" runat="server" CommandArgument='<%# Eval("ClientId")%>' OnClick="LinkButton1_Click" OnClientClick="return confirm('确定,审核通过吗?');">审核</asp:LinkButton>
    </ItemTemplate>

    protected void LinkButton1_Click(object sender, EventArgs e)
    {
        string clientId = ((LinkButton)sender).CommandArgument;

        bool result = ClientAccess.AuditClient(clientId);
        if (result)
        {
            Response.Write("<script>alert('审核成功!');</script>");
        }
        else
        {
            Response.Write("<script>alert('审核失败,信息不够详细!');</script>");
        }

        PopulateControls();
    }
    jon.valett@gmail.com
    2009年5月1日 2:18
    版主
  • button 的 Click事件里

    (sender as Button).Text = "已标为答案";

    【孟子E章】
    2009年5月1日 4:01
    版主
  • 当下次重新加载的时候, 怎么在项模版里判断 “已标为答案”我知道数据库里有一个状态:


    小吴
    2009年5月1日 5:44
  • 在ItemDataBound事件里,通过FindControl找到Button,根据数据库的值设置 Text
    【孟子E章】
    2009年5月1日 5:47
    版主
  • <%@ Page Language="C#" Debug="true" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <script runat="server">
    
     
      System.Data.DataView CreateDataSourceByXianhuiMeng()
      {
        System.Data.DataTable dt = new System.Data.DataTable();
        System.Data.DataRow dr;
        dt.Columns.Add(new System.Data.DataColumn("学生班级", typeof(System.String)));
        dt.Columns.Add(new System.Data.DataColumn("学生姓名", typeof(System.String)));
        dt.Columns.Add(new System.Data.DataColumn("语文", typeof(System.Decimal)));
        dt.Columns.Add(new System.Data.DataColumn("数学", typeof(System.Decimal)));
        dt.Columns.Add(new System.Data.DataColumn("英语", typeof(System.Decimal)));
        dt.Columns.Add(new System.Data.DataColumn("计算机", typeof(System.Decimal)));
    
        for (int i = 0; i < 8; i++)
        {
          System.Random rd = new System.Random(Environment.TickCount * i); ;
          dr = dt.NewRow();
          dr[0] = "班级" + i.ToString();
          dr[1] = "【孟子E章】" + i.ToString();
          dr[2] = System.Math.Round(rd.NextDouble() * 100, 2);
          dr[3] = System.Math.Round(rd.NextDouble() * 100, 2);
          dr[4] = System.Math.Round(rd.NextDouble() * 100, 2);
          dr[5] = System.Math.Round(rd.NextDouble() * 100, 2);
          dt.Rows.Add(dr);
        }
        System.Data.DataView dv = new System.Data.DataView(dt);
        return dv;
      }
    
    
      protected void Page_Load(object sender, EventArgs e)
      {
        if (!Page.IsPostBack)
        {
          DataList1.DataSource = CreateDataSourceByXianhuiMeng();
          DataList1.DataBind();
        }
      }
    
      protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
      {
        if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
        {
          System.Data.DataRowView dr = e.Item.DataItem as System.Data.DataRowView;
          if (System.Decimal.Parse(dr["语文"].ToString()) > 60)
          {
            (e.Item.FindControl("button1") as Button).Text = "已经标记为答案";
          }
        }
    
      }
    
      protected void button1_Click(object sender, EventArgs e)
      {
        (sender as Button).Text = "已经标记为答案";
      }
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
      <title></title>
    </head>
    <body>
      <form id="form1" runat="server">
      <asp:DataList ID="DataList1" runat="server" OnItemDataBound="DataList1_ItemDataBound">
        <ItemTemplate>
          <asp:Button ID="button1" runat="server" Text="标记为答案" OnClick="button1_Click" />
        </ItemTemplate>
      </asp:DataList>
      </form>
    </body>
    </html>
    

    【孟子E章】
    2009年5月1日 5:58
    版主
  • 楼主,你好

    除了孟老师说的这种做法外,你也可以通过直接绑定数据库状态表示,假设如果该答案已被标记为答案,状态为TRUE,否则为false。
    e.g

    public string BindState(object o)
    {
        if(Convert.ToBoolean(o)==true)
       {

         return "已标为答案";
       }
      else
       return "标记答案;"
    }


    <asp:DataList ID="DataList1" runat="server" OnItemDataBound="DataList1_ItemDataBound">
        <ItemTemplate>
          <asp:Button ID="button1" runat="server" Text='<%#BindState(Eval("State")) %>'/>
        </ItemTemplate>
      </asp:DataList>


    Microsoft Online Community Support
    2009年5月4日 2:53
  • 你可以把Template内的逻辑封装成一个UserControl,那么这一切都好做了,只要在UserControl内实现了就好。然后再暴露若干属性在外面,给DataList做数据绑定。
    Microsoft ASP.NET MVP
    2009年5月4日 3:31
    版主