急!高分求解难题(关于父/子窗体传递不刷新问题)

developerworks 2003-12-04 02:19:46
问题如下:
页面内容包括:
一个datagrid控件,在datagrid中加入checkbox进行选择。在服务器有一个名为getSelectIndex用来获取所选的是哪一行
还有一个asp:button按钮,要求点击弹出模式对话框不刷新父页面,在之前需要调用服务器函数getSelectIndex获取所选行,再将所选行的cells(1).text即编号传给模式对话框,请问各位大哥,如何解决!

...全文
76 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiandaliu 2003-12-04
  • 打赏
  • 举报
回复
//获得包含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:XIANDALIU@HOTMAIL.COM
developerworks 2003-12-04
  • 打赏
  • 举报
回复
引用恐怕是很麻烦的,因为不是同一列

因为DATAGRID默认第一列的值为3,所以要
alert(i-4);

根据上述办法,我们就可以做出不刷新页面的修改对话框,在客户端对页面进行控制,提高了性能,减少了页面。不知大家的意见是否一致?

我已经试过了。很方便实现。我做好后会把代码再次贴出来的!!
再次感谢各位
xiandaliu 2003-12-04
  • 打赏
  • 举报
回复
哦,又学会一点,恭喜楼主!!
xiandaliu 2003-12-04
  • 打赏
  • 举报
回复
恐怕是很麻烦的,因为不是同一列
developerworks 2003-12-04
  • 打赏
  • 举报
回复
谢谢兄弟们问题解决了!大家可以参考。
具体如下:
==============================================================
<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,以方便联系
developerworks 2003-12-04
  • 打赏
  • 举报
回复
在客户端checkbox可以获取了,但是我是问如何再获取DATAGRID某一列的值???有办法吗?
xiandaliu 2003-12-04
  • 打赏
  • 举报
回复
这个不好使……
developerworks 2003-12-04
  • 打赏
  • 举报
回复
请问楼上兄弟
txtid=col[i].getAttribute("id").replace("/checkbox/g","textbox");
这句话是什么意思?
为什么要这样做?
xiandaliu 2003-12-04
  • 打赏
  • 举报
回复
错了,不是同一列,你自己改改,在获得TextBox的id那错了
txtid=col[i].getAttribute("id").replace("/checkbox/g","textbox");
xiandaliu 2003-12-04
  • 打赏
  • 举报
回复
在设置时指定模板列的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());"
developerworks 2003-12-04
  • 打赏
  • 举报
回复
对于楼上的朋友,DataMgr具有什么功能?能解释一下吗?
再请问我如何在客户端获取DATAGRID某行的某列的值?
ZXYSOSO 2003-12-04
  • 打赏
  • 举报
回复
你不如改成这样,改一下方式,问题容易解决一些。

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"];

jonsonzxw 2003-12-04
  • 打赏
  • 举报
回复
请参考

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>";
}
}
xiandaliu 2003-12-04
  • 打赏
  • 举报
回复
<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>
menuvb 2003-12-04
  • 打赏
  • 举报
回复
不知道这个是否适合你:(我的只判定是否为推荐)

在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
developerworks 2003-12-04
  • 打赏
  • 举报
回复
请问楼上兄弟如何在客户端判断在模板列中绑定的复选框是否选中?
houjianxun 2003-12-04
  • 打赏
  • 举报
回复
可以用客户端代码解决

复选框绑定编号放入模板列

单击按钮时,搜索form中复选框的值,全部送给模式对话框


上面是思路
cuike519 2003-12-04
  • 打赏
  • 举报
回复
http://www.csdn.net/Develop/read_article.asp?id=15113
cuike519 2003-12-04
  • 打赏
  • 举报
回复
在孟子e章的网站上有!

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧