本帖最后由 by1782 于 2009-12-07 23:49:26 编辑

解决方案 »

  1.   

    可以结合DataGrid的ItemDataBound事件和js做
    前台页面
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>无标题页</title>
    </head>
    <body>
        <form id="form1" runat="server">
            <div>
               <asp:DataGrid ID="DG_List" runat="server" AutoGenerateColumns="False" OnItemDataBound="DG_List_ItemDataBound">
                    <Columns>
                        <asp:TemplateColumn HeaderText="选择">
                            <ItemTemplate> 
                                <asp:CheckBoxList ID="CheckBoxList1" runat="server">
                                    <asp:ListItem Value="12">12</asp:ListItem>
                                    <asp:ListItem>13</asp:ListItem>
                                </asp:CheckBoxList>
                            </ItemTemplate>
                        </asp:TemplateColumn>
                        <asp:BoundColumn DataField="FID" HeaderText="FId"></asp:BoundColumn>
                    </Columns>
                </asp:DataGrid>
                <asp:Label ID="TextBox1" runat="server"></asp:Label></div>
        </form>
    </body>
    </html>
    后台代码:
    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;public partial class _Default : System.Web.UI.Page 
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                ControlBind();
            }
        }    private void ControlBind()
        {
            DataTable dt = new DataTable();
            DataColumn dc = new DataColumn("FID", typeof(int));
            dt.Columns.Add(dc);
            for (int i = 1; i <= 10; i++)
            {
                DataRow row = dt.NewRow();
                row["FID"] = i;
                dt.Rows.Add(row);
            }        this.DG_List.DataSource = dt;
            this.DG_List.DataBind();
        }    protected void DG_List_ItemDataBound(object sender, DataGridItemEventArgs e)
        {
            if (e.Item.ItemIndex > -1)
            {
                string sId = e.Item.Cells[1].Text; 
                CheckBoxList boxList = e.Item.Cells[0].FindControl("CheckBoxList1") as CheckBoxList;
                foreach (ListItem li in boxList.Items)
                {
                    li.Attributes.Add("onclick", "document.getElementById('TextBox1').innerText=" + li.Value);
                } 
            }
        }
    }
    希望对你有帮助
      

  2.   

    尝试了一下,下列方式可以做到    //按你说的CheckBoxList1的SelectedIndexChanged事件中
        protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            string myValue;
            //你的CheckBoxList1所在行的第一列的值
            myValue = ((GridViewRow)((Control)sender).NamingContainer).Cells[0].Text;
            Label1.Text = myValue;
        }
      

  3.   

    这个。。有很大问题吗?只要利用事件e来findcontrol来查找你需要显示列的控件,找到该控件后,直接读取该控件的text,然后显示在你想要显示的lable上不就OK了吗?不需要遍历的。
      

  4.   


    这个有用,但是是GridView控件的,我用的是DataGriD。4楼的也可以,但是要给选项添加属性,还有其他简洁的法子么?