http://www.csdn.net/Develop/read_article.asp?id=15113

解决方案 »

  1.   

    可以用客户端代码解决复选框绑定编号放入模板列单击按钮时,搜索form中复选框的值,全部送给模式对话框
    上面是思路
      

  2.   

    不知道这个是否适合你:(我的只判定是否为推荐)在datagrid中增加一个模板列,并在模板列放一个checkbox控件和一个button,设置该button控件的commandname:chk
    然后下面是代码,如果按了button按钮时循环判定checkbox是否选中,如果选中在该行数据库中的一个字段改为ture,否则为false
    Private Sub DataGrid1_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.ItemCommand
    If e.CommandName = "chk" Then
                Dim chk As CheckBox
                Dim i As Integer
                For i = 0 To DataGrid1.Items.Count - 1
                    Dim j As Integer
                    j = (DataGrid1.CurrentPageIndex * 10) + i
                    chk = DataGrid1.Items(i).Cells(6).FindControl("checkbox1")
                    Dim ds1 As DataSet = New DataSet()
                    Dim sql As String
                    If tol = False Then
                        sql = "select * from guest"
                    Else
                        sql = "select * from guest where pdclass='" & DropDownList1.SelectedItem.Text & "' and pdname like '%" & TextBox1.Text & "%'"
                    End If
                    adocmd = New OleDbDataAdapter(sql, sqlprov)
                    adocmd.Fill(ds1, "guest")
                    mytable = ds1.Tables.Item(0)
                    mytable.GetChanges()
                    Dim row As DataRow = mytable.Rows.Item(j)
                    System.Diagnostics.Debug.Write(chk.Checked)
                    If chk.Checked = True Then
                        row.Item(10) = "true"
                    Else
                        row.Item(10) = "false"
                    End If
                    cmd = New OleDbCommandBuilder(adocmd)
                    adocmd.Update(ds1, "guest")
                Next
                Response.Redirect("temp.aspx?caption=推荐")
            End If
    end sub
    '''循环判定的函数
    Private Sub chkfind() '    显示datagrid checkbox 模板列数据
            Dim i, j As Integer
            Dim sqlconn As String
            Dim ds As DataSet = New DataSet()
            Dim chk As CheckBox
            For i = 0 To DataGrid1.Items.Count - 1
                j = (DataGrid1.CurrentPageIndex * 10) + i
                If tol = False Then
                    sqlconn = "select * from guest"
                Else
                    sqlconn = "select * from guest where pdclass='" & DropDownList1.SelectedItem.Text & "' and pdname like '%" & TextBox1.Text & "%'"
                End If
                adocmd = New OleDbDataAdapter(sqlconn, sqlprov)
                adocmd.Fill(ds, "guest")
                mytable = ds.Tables.Item(0)
                Dim row As DataRow = mytable.Rows.Item(j)
                chk = DataGrid1.Items(i).Cells(6).FindControl("checkbox1")
                If row.Item(10) = True Then
                    chk.Checked = True
                Else
                    chk.Checked = False
                End If
            Next
        End Sub
      

  3.   

    <script language="JavaScript">
    function getSelectIndex()
    {
    var col;
    col=document.all.tags("input");
    for( i=0;i<col.length;i++ )
    {
    if( col[i].getAttribute("type")=="checkbox" && col[i].getAttribute("id").search("/yourDataGridID/i")>-1 )
    {
    if(col[i].getAttribute("checked")==true)
    {//被选中了。。}
    }
    }
    }
    </Script>
      

  4.   

    请参考var len = document.all.grid.rows.length-2;
    var xmlStr = "";
    var nocheck = false;

    if(len>1)
    {
    for(var i=0;i<len;i++){
    if(document.DataMgr["grid__ctl"+(3+i)+"_chkItem"].checked)
    {
    nocheck = true;
    xmlStr += "<DATAID>"+document.DataMgr["grid__ctl"+(3+i)+"_chkItem"].value+"</DATAID>";
    }
    }
    }
    else
    {
    if(document.DataMgr["grid__ctl3.chkItem"].checked)
    {
    nocheck = true;
    xmlStr += "<DATAID>"+document.DataMgr["grid__ctl3_chkItem"].value+"</DATAID>";
    }
    }
      

  5.   

    你不如改成这样,改一下方式,问题容易解决一些。HTML:
    <%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="WebApplication1.WebForm1" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
    <HEAD>
    <title>WebForm1</title>
    <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
    <meta name="CODE_LANGUAGE" Content="C#">
    <meta name="vs_defaultClientScript" content="JavaScript">
    <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    </HEAD>
    <body MS_POSITIONING="GridLayout">
    <form id="Form1" method="post" runat="server">
    <asp:DataGrid id="DataGrid1" style="Z-INDEX: 101; LEFT: 0px; POSITION: absolute; TOP: 8px" runat="server"
    AutoGenerateColumns="False">
    <Columns>
    <asp:TemplateColumn HeaderText="编号">
    <ItemTemplate>
    <a href="javascript:window.showModalDialog('WebForm2.aspx?value=<%# DataBinder.Eval(Container, "DataItem.title_id") %>', window,'');">
    <asp:Label id=Label1 runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.title_id") %>'>
    </asp:Label>
    </a>
    </ItemTemplate>
    </asp:TemplateColumn>
    </Columns>
    </asp:DataGrid>
    </form>
    </body>
    </HTML>CS:
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Data.SqlClient;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;namespace WebApplication1
    {
    /// <summary>
    /// WebForm1 的摘要说明。
    /// </summary>
    public class WebForm1 : System.Web.UI.Page
    {
    protected System.Web.UI.WebControls.DataGrid DataGrid1;

    private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    //if (!this.IsPostBack)
    //{
    SqlConnection sc=new SqlConnection("server=localhost;database=pubs;uid=zxy;pwd=zxy");
    SqlDataAdapter sp=new SqlDataAdapter("select title_id from titles",sc);
    DataSet ds=new DataSet();
    sp.Fill(ds,"titles");
    DataGrid1.DataSource=ds.Tables[0].DefaultView;
    DataGrid1.DataBind(); //}
    } #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion
    }
    }
    WebForm2中只接收传过来的值(在Page_Load中):
    TextBox1.Text=this.Request.QueryString["value"];
      

  6.   

    对于楼上的朋友,DataMgr具有什么功能?能解释一下吗?
    再请问我如何在客户端获取DATAGRID某行的某列的值?
      

  7.   

    在设置时指定模板列的CheckBox的id为checkbox,TextBox的id为textbox
    <script language="JavaScript">
    function getSelectIndex()
    {
    var returnvalue;
    var col;
    var txtid;
    col=document.all.tags("input");
    for( i=0;i<col.length;i++ )
    {
    if( col[i].getAttribute("type")=="checkbox" && col[i].getAttribute("id").search("/yourDataGridID/i")>-1 )
    {
    if(col[i].getAttribute("checked")==true)
    {
    txtid=col[i].getAttribute("id").replace("/checkbox/g","textbox");
    //选中的值
    if(returnvalue!=null)
    returnvalue=returnvalue+"&"+txtid+"="+document.all.item(txtid).value;
    else
    returnvalue="?"+txtid+"="+document.all.item(txtid).value;}
    }
    }
    return returnvalue;
    }
    </Script>//使用
    onclick="javascript:window.showModalDialog('test.aspx'+getSelectIndex());"
      

  8.   

    错了,不是同一列,你自己改改,在获得TextBox的id那错了
    txtid=col[i].getAttribute("id").replace("/checkbox/g","textbox");
      

  9.   

    请问楼上兄弟
    txtid=col[i].getAttribute("id").replace("/checkbox/g","textbox");
    这句话是什么意思?
    为什么要这样做?
      

  10.   

    在客户端checkbox可以获取了,但是我是问如何再获取DATAGRID某一列的值???有办法吗?
      

  11.   

    谢谢兄弟们问题解决了!大家可以参考。
    具体如下:
    ==============================================================
    <script language=javascript>
    function getSelectIndex()
    {
    var col;
    var obj;
    col=document.all.tags("input");
    obj=document.all.item("dgGW");

    for( i=0;i<col.length;i++ ){
    if( col[i].getAttribute("type")=="checkbox" && col[i].getAttribute("id").search(/dgGW/i)>-1 )
    {
    if(col[i].getAttribute("checked")==true){
       alert(i-4);
       alert(obj.rows[i-4].cells[1].innerText);   
       }
                    }
                    }
    }
      
    </script>
    ==============================================================
    在此感谢各位的支持。如果愿意的话,大家是否可以在此贴留下您的QQ,以方便联系
      

  12.   

    引用恐怕是很麻烦的,因为不是同一列因为DATAGRID默认第一列的值为3,所以要
    alert(i-4);根据上述办法,我们就可以做出不刷新页面的修改对话框,在客户端对页面进行控制,提高了性能,减少了页面。不知大家的意见是否一致?我已经试过了。很方便实现。我做好后会把代码再次贴出来的!!
    再次感谢各位
      

  13.   

    //获得包含CheckBoox的DataGrid(id为dgname)中CheckBox被选中的那一行的哪一列(valuecolumnindex)的值
    function getSelectIndex( dgname,valuecolumnindex )
    {
    var col;
    var obj;
    var index;
    col=document.all.tags("input");
    obj=document.all.item("dgname");
    index=0; for( i=0;i<col.length;i++ ){
    if( col[i].getAttribute("type")=="checkbox" && col[i].getAttribute("id").search(/dgname/i)>-1 ){
    if(col[i].getAttribute("checked")==true){
       alert(obj.rows[index].cells[valuecolumnindex].innerText);   
    }
    index++;
            }
        }
    }
    =============================================================
    我没QQ,MSN:[email protected]