【轉並修改】WebForm中DataGrid的ItemDataBound事件

來源:互聯網
上載者:User
轉自:http://blog.csdn.net/kennymoni/archive/2005/12/15/553039.aspx

  當項被資料繫結到 DataGrid 控制項後,將引發 ItemDataBound 事件。此事件提供了在用戶端顯示資料項目之前訪問該資料項目的最後機會。利用DataGrid的ItemDataBound事件,我們可以輕鬆實現一些實用的功能。

  (1)修改每一行的顯示內容
  private void DataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e)
{
   
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        //選擇DataGrid中模板的連結"HLName"
        HyperLink mhlink=(HyperLink)e.Item.FindControl("HLName");
        DataRowView drv = (DataRowView)e.Item.DataItem;
 
        //設定每一行的序號
        int num = e.Item.ItemIndex + 1;
        e.Item.Cells[0].Text = num.ToString();

        //設定連結行的名字和URL及欄位
        mhlink .Text=drv["Name"].ToString ();    
 mhlink.NavigateUrl = "/InfoDetail.aspx?DetailID="+drv["DetailID"].ToString();
 mhlink.Target="_blank";  
 
        //“性別”欄位在資料庫中是以“0”和“1”儲存的,現在以“男”和“女”展現給使用者
        int sex = Convert.ToInt32(drv["FSex"]);
        e.Item.Cells[2].Text = (sex == 0 ? "男" : "女");
 
        //將“婚否”欄位綁定到 CheckBox
        int married = Convert.ToInt32(drv["FMarried"]);
        CheckBox chk = (CheckBox)e.Item.FindControl("CheckBox1");
        chk.Checked = (married == 0 ? false : true);
    }
}
效果

 


 (2)計算合計
  有時候需要統計DataGrid中一列或者多列數值列的和,在DataGrid_ItemDataBound裡寫一段小代碼來實現,和顯示在DataGrid的Footer裡面
首先定義一個decimal iTotal
 if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
 {
   if(e.Item.Cells[1].Text != null && e.Item.Cells[1].Text != "")
   {  
   iTotal += Convert.ToDecimal(e.Item.Cells[1].Text.ToString());
   }
 }
 if(e.Item.ItemType == ListItemType.Footer)
 {
  e.Item.Cells[0].Text = "合計";
  e.Item.Cells[1].Text = iTotal.ToString(); //顯示和
 }
如果有多列需要同時求和,可以用數組來實現首先定義一個decimal數組
decimal[] iTotal = new decimal[5];
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
 {
  for(int i=0;i<5;i++)
   { 
    if(e.Item.Cells[i+1].Text != null && e.Item.Cells[i+1].Text != "")
      {
      iTotal += Convert.ToDecimal(e.Item.Cells[i+1].Text.ToString());
      }
   }
 }
 if(e.Item.ItemType == ListItemType.Footer)
 {
   e.Item.Cells[0].Text = "合計";
   for(int i=0;i<5;i++)
    {
     e.Item.Cells[i+1].Text = iTotal.ToString();
     }
  }
這種做法只能統計DataGrid中一頁資料某數值列的和,如果想統計全部資料的和,變通一下完全可以實現.
DataGrid的DataGrid_ItemDataBound事件可以實現好多比較實用的功能
比如可以為每條記錄刪除按鈕添加確認提示等.
 (3)給模板列中的按鈕添加用戶端事件或服務端事件
       .aspx中的javascript指令碼代碼如下:
       <script language="javascript" type="text/javascript">
       function choice_click(iRow,colVar)
      {
         document.getElementById("txtProductName").value=document.getElementById("DataGrid1").rows[iRow].cells[1].innerText;
         document.getElementById("txtProductId").value=colVar;
      }  
      </script>
      .aspx中DataGrid模板列如下
      <asp:TemplateColumn HeaderText="操作">
       <ItemTemplate>
        <asp:Button id="btnChoice" CommandName="Choice" Text="選擇" Runat="server"></asp:Button>
       </ItemTemplate>
      </asp:TemplateColumn>
      .cs中的後台代碼如下:

       private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
  {
   if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
   {
    DataRowView drv = (DataRowView)e.Item.DataItem;
    //為Button按鈕添加用戶端事件
    Button  btnChoice=(Button)e.Item.FindControl("btnChoice");
    btnChoice.Attributes.Add ("onclick","javascript:choice_click("+(e.Item.ItemIndex+1)+","+e.Item.Cells[1].Text+");");
     //為Button按鈕添加服務端事件
    btnChoice.Click +=new EventHandler(btnChoice_Click);
    btnChoice.CommandArgument =  drv["productNum"]+","+drv["productID"].ToString();
    btnChoice.CommandArgument="choice";
    }
  }

     private void btnChoice_Click(object sender, EventArgs e)
    {
            //後台事件代碼
    }

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.