如何让DataGrid能够在客户端点击某一行的任意位置,而触发服务端的事件(Asp.net)

时间:2021-10-08 16:14:15
如何让DataGrid能够在客户端点击某一行的任意位置,而触发服务端的事件(Asp.net)

如下是我的测试(实现了,但存在问题)
1. 在Page_Load中增加代码:
this.Page.GetPostBackEventReference(DataGrid1,"");
 
2. 在 ItemCreated 事件中编写如下代码(经过观察DataGrid 的 Select LinkButton得到):
private void DataGrid1_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
  if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem || e.Item.ItemType==ListItemType.SelectedItem)
  {
    e.Item.Attributes.Add("onclick","__doPostBack('"+sender.ClientID+"$_ctl"+(e.Item.ItemIndex+2).ToString()+"$_ctl0','')");
  }
}

与 DataGrid 的 Select LinkButton 的脚本命令一致,但没有触发SelectedIndexChanged事件

3. 加入一个Select LinkButton,再次执行,发现点击某一行的任意位置都可以触发到事件了,虽然得到了想要的结果,但又不希望Select LinkButton出现。

为什么代码一致的情况下,不会在服务端触发事件?

23 个解决方案

#1


你可在行中,加入一个看不见的按钮.然后,对行做事件,当单击行时,用脚本单击按钮.这样就可以实现页面提交.
假设你的按钮放在第0列中(你可用模板列)

1.绑定你的控件
this.datagrid1.DataBind();
2.循环你的控件行(假设你已经添加了一个按钮button1
for(int i=0;i<this.datagrid1.Items.Count;i++)
{
//求取按钮,主要要求取它的ID值
Button mybut = (Button)this.datagrid1.Items[i].FindControl("button1");
//将该按钮隐藏
mybut.Style.Add("display","none");
//对控件的行做事件
this.datagrid1.Items[i].Attributes.Add("onclick","document.all('" + mybut.ClientID + "').click();");
}

这样,当你点击行时,则脚本自动触发点击该行的按钮,从而就实现了页面的提交

#2


这样做,在grid的ItemDataBound事件中写
private void grdOD_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
e.Item.Attributes.Add("onmouseover","currentcolor=this.style.backgroundColor;this.style.backgroundColor='#319de5'");//改变当前行的颜色
e.Item.Attributes.Add("onmouseout","this.style.backgroundColor=currentcolor");//恢复当前行的颜色
e.Item.Attributes.Add("OnClick","openShowform(" + "'"+e.Item.Cells[1].Text.ToString()  +"','"+Server.UrlEncode(e.Item.Cells[4].Text)+"')");//点击该行的任一位置,触发onclick(写在前台的javascript我这里是打开一个窗口并传值)事件
//
}

#3


成功后,给分啊
那有问题,可以问

#4


using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
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 ls_yd_lr
{
/// <summary>
/// WebForm1 的摘要说明。
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Data.SqlClient.SqlDataAdapter sqlDataAdapter1;
protected System.Data.SqlClient.SqlConnection sqlConnection1;
protected System.Web.UI.WebControls.DataGrid grid;
protected System.Data.SqlClient.SqlCommand sqlSelectCommand1;
protected System.Data.SqlClient.SqlCommand sqlInsertCommand1;
protected System.Data.SqlClient.SqlCommand sqlUpdateCommand1;
protected System.Data.SqlClient.SqlCommand sqlDeleteCommand1;
protected System.Web.UI.HtmlControls.HtmlInputText ID_Grid1_Td_ID;

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面

if(!IsPostBack)
BindData();


}

public void BindData()
{
DataTable table=(DataTable)Cache["lion"];
if(table==null)
{




// Add the column to a new DataTable.


            

table=new DataTable("table");
  
DataColumn myColumn = new DataColumn();
myColumn.DataType = System.Type.GetType("System.Int32");
myColumn.ColumnName="ID";
myColumn.AutoIncrement = true;
myColumn.AutoIncrementSeed = 1;
myColumn.AutoIncrementStep = 1;
table.Columns.Add(myColumn); 
this.sqlDataAdapter1.Fill(table);
Cache["lion"]=table;
}
grid.DataKeyField = "ID";
grid.DataSource=table;
grid.DataBind();
}
public void UpdateGrid(object src,DataGridCommandEventArgs e)
{
DataTable table=(DataTable)Cache["Webdiyer"];
int id=(int)grid.DataKeys[e.Item.ItemIndex]-1;
table.Rows[id][1]=((TextBox)e.Item.Cells[2].Controls[0]).Text;
table.Rows[id][2]=((TextBox)e.Item.Cells[3].Controls[0]).Text;
table.Rows[id][3]=((TextBox)e.Item.Cells[4].Controls[0]).Text;
Cache["Webdiyer"]=table;
grid.EditItemIndex=-1;
BindData();
}

public  void ClickTest(object src,EventArgs e)
{
LinkButton hlink=(LinkButton)src;
if(hlink.CommandName=="Edit")
{
grid.EditItemIndex=int.Parse(hlink.CommandArgument)-1;
BindData();

((System.Web.UI.WebControls.TextBox)(this.grid.Items[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex].Cells[1].Controls[0])).Style.Add("width","100%");
((System.Web.UI.WebControls.TextBox)(this.grid.Items[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex].Cells[1].Controls[0])).Style.Add("border-width","0px");
((System.Web.UI.WebControls.TextBox)(this.grid.Items[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex].Cells[1].Controls[0])).ReadOnly = true;
((System.Web.UI.WebControls.TextBox)(this.grid.Items[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex].Cells[2].Controls[0])).Style.Add("width","100%");
((System.Web.UI.WebControls.TextBox)(this.grid.Items[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex].Cells[2].Controls[0])).Style.Add("border-width","0px");
((System.Web.UI.WebControls.TextBox)(this.grid.Items[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex].Cells[2].Controls[0])).ReadOnly = true;
((System.Web.UI.WebControls.TextBox)(this.grid.Items[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex].Cells[3].Controls[0])).Style.Add("width","100%");
((System.Web.UI.WebControls.TextBox)(this.grid.Items[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex].Cells[3].Controls[0])).Style.Add("border-width","0px");
((System.Web.UI.WebControls.TextBox)(this.grid.Items[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex].Cells[3].Controls[0])).ReadOnly = true;
if(int.Parse(this.Request.Params["ID_Grid1_Td_ID"])!=-1 && int.Parse(this.Request.Params["ID_Grid1_Td_ID"])!=0 )
{  // if (this.Request.Params["ID_Grid1_Td_ID"].ToString())

((System.Web.UI.WebControls.TextBox)(this.grid.Items[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex].Cells[int.Parse(this.Request.Params["ID_Grid1_Td_ID"])].Controls[0])).ReadOnly = false;
((System.Web.UI.WebControls.TextBox)(this.grid.Items[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex].Cells[int.Parse(this.Request.Params["ID_Grid1_Td_ID"])].Controls[0])).Style.Add("text-align","center");
((System.Web.UI.WebControls.TextBox)(this.grid.Items[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex].Cells[int.Parse(this.Request.Params["ID_Grid1_Td_ID"])].Controls[0])).Attributes.Add("onblur",Page.GetPostBackEventReference(this.grid.Items[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex].FindControl("updatebtn")));

}


}
else
{
DataTable table=(DataTable)Cache["lion"];
table.Rows[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex][2]=((TextBox)(this.grid.Items[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex].Cells[1].Controls[0])).Text;
table.Rows[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex][3]=((TextBox)(this.grid.Items[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex].Cells[2].Controls[0])).Text;
table.Rows[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex][4]=((TextBox)(this.grid.Items[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex].Cells[3].Controls[0])).Text;
Cache["lion"]=table;
grid.EditItemIndex=-1;
BindData();
}
}
public void BindScript(object src,DataGridItemEventArgs e)
{

if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
{
e.Item.Attributes.Add("onclick","if(!isNaN(event.srcElement.cellIndex)){document.all.item(\"ID_Grid1_Td_ID\").value=event.srcElement.cellIndex;}else{document.all.item(\"ID_Grid1_Td_ID\").value=-1}"+Page.GetPostBackEventReference(e.Item.FindControl("editbtn")));
}
}


public  void RemoveCache(object src,EventArgs e)
{
Cache.Remove("lion");
grid.EditItemIndex=-1;
BindData();
}


#5


#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{    
this.sqlDataAdapter1 = new System.Data.SqlClient.SqlDataAdapter();
this.sqlConnection1 = new System.Data.SqlClient.SqlConnection();
this.sqlSelectCommand1 = new System.Data.SqlClient.SqlCommand();
this.sqlInsertCommand1 = new System.Data.SqlClient.SqlCommand();
this.sqlUpdateCommand1 = new System.Data.SqlClient.SqlCommand();
this.sqlDeleteCommand1 = new System.Data.SqlClient.SqlCommand();
// 
// sqlDataAdapter1
// 
this.sqlDataAdapter1.DeleteCommand = this.sqlDeleteCommand1;
this.sqlDataAdapter1.InsertCommand = this.sqlInsertCommand1;
this.sqlDataAdapter1.SelectCommand = this.sqlSelectCommand1;
this.sqlDataAdapter1.TableMappings.AddRange(new System.Data.Common.DataTableMapping[] {
  new System.Data.Common.DataTableMapping("Table", "authors", new System.Data.Common.DataColumnMapping[] {
 new System.Data.Common.DataColumnMapping("au_id", "au_id"),
 new System.Data.Common.DataColumnMapping("au_lname", "au_lname"),
 new System.Data.Common.DataColumnMapping("au_fname", "au_fname"),
 new System.Data.Common.DataColumnMapping("phone", "phone"),
 new System.Data.Common.DataColumnMapping("address", "address"),
 new System.Data.Common.DataColumnMapping("city", "city"),
 new System.Data.Common.DataColumnMapping("state", "state"),
 new System.Data.Common.DataColumnMapping("zip", "zip"),
 new System.Data.Common.DataColumnMapping("contract", "contract")})});
this.sqlDataAdapter1.UpdateCommand = this.sqlUpdateCommand1;
// 
// sqlConnection1
// 
this.sqlConnection1.ConnectionString = "workstation id=GW;packet size=4096;user id=sa;data source=GW;persist security inf" +
"o=True;initial catalog=pubs;password=";
// 
// sqlSelectCommand1
// 
this.sqlSelectCommand1.CommandText = "SELECT au_id, au_lname, au_fname, phone, address, city, state, zip, contract FROM" +
" authors";
this.sqlSelectCommand1.Connection = this.sqlConnection1;
// 
// sqlInsertCommand1
// 
this.sqlInsertCommand1.CommandText = @"INSERT INTO authors(au_id, au_lname, au_fname, phone, address, city, state, zip, contract) VALUES (@au_id, @au_lname, @au_fname, @phone, @address, @city, @state, @zip, @contract); SELECT au_id, au_lname, au_fname, phone, address, city, state, zip, contract FROM authors WHERE (au_id = @au_id)";
this.sqlInsertCommand1.Connection = this.sqlConnection1;
this.sqlInsertCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@au_id", System.Data.SqlDbType.VarChar, 11, "au_id"));
this.sqlInsertCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@au_lname", System.Data.SqlDbType.VarChar, 40, "au_lname"));
this.sqlInsertCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@au_fname", System.Data.SqlDbType.VarChar, 20, "au_fname"));
this.sqlInsertCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@phone", System.Data.SqlDbType.VarChar, 12, "phone"));
this.sqlInsertCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@address", System.Data.SqlDbType.VarChar, 40, "address"));
this.sqlInsertCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@city", System.Data.SqlDbType.VarChar, 20, "city"));
this.sqlInsertCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@state", System.Data.SqlDbType.VarChar, 2, "state"));
this.sqlInsertCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@zip", System.Data.SqlDbType.VarChar, 5, "zip"));
this.sqlInsertCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@contract", System.Data.SqlDbType.Bit, 1, "contract"));
// 
// sqlUpdateCommand1
// 
this.sqlUpdateCommand1.CommandText = @"UPDATE authors SET au_id = @au_id, au_lname = @au_lname, au_fname = @au_fname, phone = @phone, address = @address, city = @city, state = @state, zip = @zip, contract = @contract WHERE (au_id = @Original_au_id) AND (address = @Original_address OR @Original_address IS NULL AND address IS NULL) AND (au_fname = @Original_au_fname) AND (au_lname = @Original_au_lname) AND (city = @Original_city OR @Original_city IS NULL AND city IS NULL) AND (contract = @Original_contract) AND (phone = @Original_phone) AND (state = @Original_state OR @Original_state IS NULL AND state IS NULL) AND (zip = @Original_zip OR @Original_zip IS NULL AND zip IS NULL); SELECT au_id, au_lname, au_fname, phone, address, city, state, zip, contract FROM authors WHERE (au_id = @au_id)";
this.sqlUpdateCommand1.Connection = this.sqlConnection1;
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@au_id", System.Data.SqlDbType.VarChar, 11, "au_id"));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@au_lname", System.Data.SqlDbType.VarChar, 40, "au_lname"));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@au_fname", System.Data.SqlDbType.VarChar, 20, "au_fname"));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@phone", System.Data.SqlDbType.VarChar, 12, "phone"));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@address", System.Data.SqlDbType.VarChar, 40, "address"));

#6


this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@city", System.Data.SqlDbType.VarChar, 20, "city"));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@state", System.Data.SqlDbType.VarChar, 2, "state"));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@zip", System.Data.SqlDbType.VarChar, 5, "zip"));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@contract", System.Data.SqlDbType.Bit, 1, "contract"));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_au_id", System.Data.SqlDbType.VarChar, 11, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "au_id", System.Data.DataRowVersion.Original, null));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_address", System.Data.SqlDbType.VarChar, 40, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "address", System.Data.DataRowVersion.Original, null));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_au_fname", System.Data.SqlDbType.VarChar, 20, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "au_fname", System.Data.DataRowVersion.Original, null));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_au_lname", System.Data.SqlDbType.VarChar, 40, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "au_lname", System.Data.DataRowVersion.Original, null));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_city", System.Data.SqlDbType.VarChar, 20, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "city", System.Data.DataRowVersion.Original, null));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_contract", System.Data.SqlDbType.Bit, 1, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "contract", System.Data.DataRowVersion.Original, null));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_phone", System.Data.SqlDbType.VarChar, 12, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "phone", System.Data.DataRowVersion.Original, null));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_state", System.Data.SqlDbType.VarChar, 2, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "state", System.Data.DataRowVersion.Original, null));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_zip", System.Data.SqlDbType.VarChar, 5, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "zip", System.Data.DataRowVersion.Original, null));
// 
// sqlDeleteCommand1
// 
this.sqlDeleteCommand1.CommandText = @"DELETE FROM authors WHERE (au_id = @Original_au_id) AND (address = @Original_address OR @Original_address IS NULL AND address IS NULL) AND (au_fname = @Original_au_fname) AND (au_lname = @Original_au_lname) AND (city = @Original_city OR @Original_city IS NULL AND city IS NULL) AND (contract = @Original_contract) AND (phone = @Original_phone) AND (state = @Original_state OR @Original_state IS NULL AND state IS NULL) AND (zip = @Original_zip OR @Original_zip IS NULL AND zip IS NULL)";
this.sqlDeleteCommand1.Connection = this.sqlConnection1;
this.sqlDeleteCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_au_id", System.Data.SqlDbType.VarChar, 11, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "au_id", System.Data.DataRowVersion.Original, null));
this.sqlDeleteCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_address", System.Data.SqlDbType.VarChar, 40, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "address", System.Data.DataRowVersion.Original, null));
this.sqlDeleteCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_au_fname", System.Data.SqlDbType.VarChar, 20, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "au_fname", System.Data.DataRowVersion.Original, null));
this.sqlDeleteCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_au_lname", System.Data.SqlDbType.VarChar, 40, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "au_lname", System.Data.DataRowVersion.Original, null));
this.sqlDeleteCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_city", System.Data.SqlDbType.VarChar, 20, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "city", System.Data.DataRowVersion.Original, null));
this.sqlDeleteCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_contract", System.Data.SqlDbType.Bit, 1, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "contract", System.Data.DataRowVersion.Original, null));
this.sqlDeleteCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_phone", System.Data.SqlDbType.VarChar, 12, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "phone", System.Data.DataRowVersion.Original, null));
this.sqlDeleteCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_state", System.Data.SqlDbType.VarChar, 2, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "state", System.Data.DataRowVersion.Original, null));
this.sqlDeleteCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_zip", System.Data.SqlDbType.VarChar, 5, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "zip", System.Data.DataRowVersion.Original, null));
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion
}
}

#7


<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="ls_yd_lr.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="grid" style="Z-INDEX: 101; LEFT: 96px; POSITION: absolute; TOP: 88px" runat="server"
OnItemDataBound="BindScript" AutoGenerateColumns="False">
<Columns>
<asp:TemplateColumn HeaderText="编号">
<ItemStyle HorizontalAlign="Center"></ItemStyle>
<ItemTemplate>
<%#DataBinder.Eval(Container.DataItem,"ID")%>
<asp:LinkButton Text='' runat="server" id="editbtn" CommandName="Edit" CommandArgument='<%#DataBinder.Eval(Container.DataItem,"ID")%>' OnClick="ClickTest"/>
</ItemTemplate>
<EditItemTemplate>
<%#DataBinder.Eval(Container.DataItem,"ID")%>
<asp:LinkButton id="updatebtn" Text='' runat="server" CommandName="Update" CommandArgument='<%#DataBinder.Eval(Container.DataItem,"ID")%>' OnClick="ClickTest"/>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn DataField="au_fname" HeaderText="第三列"></asp:BoundColumn>
<asp:BoundColumn DataField="au_fname" HeaderText="第四列"></asp:BoundColumn>
<asp:BoundColumn DataField="phone" HeaderText="第五列"></asp:BoundColumn>
</Columns>
</asp:DataGrid><INPUT id="ID_Grid1_Td_ID" style="Z-INDEX: 102; LEFT: 8px; WIDTH: 100px; POSITION: absolute; TOP: 8px"
type="text" name="ID_Grid1_Td_ID" runat="server">
</form>
</body>
</HTML>

#8


考过去可以直接运行,你试试吧..csdn 前一位高手写的.....

#9


上面的各位,请看明白我的问题:
1. 我已经能够在DataGrid中显示 Access/SQL Server/Oracle/MySql任意数据库中所需要的数据,不需要有人告诉我如何做DataBind的工作

2. 我已经能够点击某一行的任意位置都可以触发到事件,但前提是我必须手动加入一个Select LinkButton列,这是我不愿意做的。

上面的所有人都没有回答到关键点上。

我真正想问的是:为什么相同的客户端代码,在服务端不能得到相同的结果?

*本问题与制作服务件控件有点关系,即事件的触发机制,它与客户端的代码的关系。

#10


大家可以参看3个例子:

1. 直接生成脚本(没有Select LinkButton)
Http://HHYD.oicp.net:8081/Test/WebForm3.aspx

2. 直接生成脚本,并且有Select LinkButton
Http://HHYD.oicp.net:8081/Test/WebForm4.aspx

3. 直接生成脚本,并且有Select LinkButton,但将 Select LinkButton 隐藏(与 1 进行比较)
Http://HHYD.oicp.net:8081/Test/WebForm5.aspx


#11


http://www.cnblogs.com/lovecherry/archive/2005/05/15/155831.html

#12


在客户端用javascript 提交到服务器

 document.Form.submit()

#13


to LoveCherry(论成败,人生豪迈;大不了,重头再来!^_^) :
那上面仅仅有代码,没有说明。而且代码和我的很接近,没有参考价值。

to goody9807():
请注意,我生成的脚本中调用了 __doPostBack,它里面已经有 theform.submit();

#14


楼主你有没有仔细看我的代码?麻烦你在再一下
这样做,在grid的ItemDataBound事件中写
private void grdOD_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
e.Item.Attributes.Add("onmouseover","currentcolor=this.style.backgroundColor;this.style.backgroundColor='#319de5'");//改变当前行的颜色
e.Item.Attributes.Add("onmouseout","this.style.backgroundColor=currentcolor");//恢复当前行的颜色
e.Item.Attributes.Add("OnClick","openShowform(" + "'"+e.Item.Cells[1].Text.ToString()  +"','"+Server.UrlEncode(e.Item.Cells[4].Text)+"')");//点击该行的任一位置,触发onclick(写在前台的javascript我这里是打开一个窗口并传值)事件
//
}

#15


to codeangel(-- 与人方便,自已方便 --) :
麻烦你也看看我的代码:

if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem || e.Item.ItemType==ListItemType.SelectedItem)
  {
    e.Item.Attributes.Add("onclick","__doPostBack('"+sender.ClientID+"$_ctl"+(e.Item.ItemIndex+2).ToString()+"$_ctl0','')");
  }

和你的类似,点击某一行,就会触发__doPostBack方法,将数据提交到服务端

#16


先来接点分啊.

#17


to all:
请看 Http://HHYD.oicp.net:8081/Test/WebForm5.aspx 例子
它已经实现了我需要的功能,但是我必须手动增加一个Select LinkButton到 DataGrid中。

我希望能够不用增加Select LinkButton!


1. 直接生成脚本(没有Select LinkButton)
Http://HHYD.oicp.net:8081/Test/WebForm3.aspx

2. 直接生成脚本,并且有Select LinkButton
Http://HHYD.oicp.net:8081/Test/WebForm4.aspx

3. 直接生成脚本,并且有Select LinkButton,但将 Select LinkButton 隐藏(与 1 进行比较)
Http://HHYD.oicp.net:8081/Test/WebForm5.aspx

这3个例子是我逐步探索这个问题做的页面。它们都使用了我在最上面的代码,区别就在于是否有 Select LinkButton在DataGrid中,和Select LinkButton是否隐藏状态。

#18


都出来了,你还有什么问题?
1.可以将select linkbutton在datagrid中隐藏
2.可以隐藏一个(web或html)控件,在你的“__doPostBack”事件中将你选中的项的ID给这个隐藏控件。
当然你也可再加一个服务器控件的button
如:__doPostBack
function __doPostBack(PersonNO)
if(confirm('你确定要删除该人员吗?'))
{
document.all.txtPersonNo.value = PersonNO;//txtPersonNo是隐藏的
document.all.btnDelPerson.click();//btnDelPerson也是隐藏的 因为是它服务器控件所以你可以在他的里面写东西
}
3.用DataGrid的Item.CommandName的也可以操作

#19


你光做一个客户端的服务器提交命令,但这些事件并没有在服务端注册,你在何处接收呢?
另外,也不用太拘泥吧.用我写的方法,可以很好的实现你的目的,并且没有不方便之处,为什么不尝试一下呢?

#20


1. 在Page的类定义增加IPostBackEventHandler接口,例如:
public class MyPage : Page, IPostBackEventHandler

 
2. 在 ItemDataBound 事件中编写如下代码:
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
  if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem || e.Item.ItemType==ListItemType.SelectedItem)
  {
    e.Item.Attributes.Add("onclick",
      this.Page.GetPostBackEventReference(this,e.Item.ItemIndex));
  }
}

3. 加入一个事件处理程序。
void IPostBackEventHandler.RaisePostBackEvent(string eventArgument)
{
  int Index=Convert.ToInt16(eventArgument);
  this.SelectedIndex=Index;
  this.OnSelectedIndexChanged(EventArgs.Empty);
}

#21


煞费苦心地去猜测“sender.ClientID+"$_ctl"+(e.Item.ItemIndex+2).ToString()+"$_ctl0”未必是好事,这个结果只是恰好可以,但是你动一动DataGrid的不同Item的设置,就不行了。

用体系结构中已经设计好的方法,其实更简单可靠。

#22


mark

#23


关注。

自己再试试看。

#1


你可在行中,加入一个看不见的按钮.然后,对行做事件,当单击行时,用脚本单击按钮.这样就可以实现页面提交.
假设你的按钮放在第0列中(你可用模板列)

1.绑定你的控件
this.datagrid1.DataBind();
2.循环你的控件行(假设你已经添加了一个按钮button1
for(int i=0;i<this.datagrid1.Items.Count;i++)
{
//求取按钮,主要要求取它的ID值
Button mybut = (Button)this.datagrid1.Items[i].FindControl("button1");
//将该按钮隐藏
mybut.Style.Add("display","none");
//对控件的行做事件
this.datagrid1.Items[i].Attributes.Add("onclick","document.all('" + mybut.ClientID + "').click();");
}

这样,当你点击行时,则脚本自动触发点击该行的按钮,从而就实现了页面的提交

#2


这样做,在grid的ItemDataBound事件中写
private void grdOD_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
e.Item.Attributes.Add("onmouseover","currentcolor=this.style.backgroundColor;this.style.backgroundColor='#319de5'");//改变当前行的颜色
e.Item.Attributes.Add("onmouseout","this.style.backgroundColor=currentcolor");//恢复当前行的颜色
e.Item.Attributes.Add("OnClick","openShowform(" + "'"+e.Item.Cells[1].Text.ToString()  +"','"+Server.UrlEncode(e.Item.Cells[4].Text)+"')");//点击该行的任一位置,触发onclick(写在前台的javascript我这里是打开一个窗口并传值)事件
//
}

#3


成功后,给分啊
那有问题,可以问

#4


using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
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 ls_yd_lr
{
/// <summary>
/// WebForm1 的摘要说明。
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Data.SqlClient.SqlDataAdapter sqlDataAdapter1;
protected System.Data.SqlClient.SqlConnection sqlConnection1;
protected System.Web.UI.WebControls.DataGrid grid;
protected System.Data.SqlClient.SqlCommand sqlSelectCommand1;
protected System.Data.SqlClient.SqlCommand sqlInsertCommand1;
protected System.Data.SqlClient.SqlCommand sqlUpdateCommand1;
protected System.Data.SqlClient.SqlCommand sqlDeleteCommand1;
protected System.Web.UI.HtmlControls.HtmlInputText ID_Grid1_Td_ID;

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面

if(!IsPostBack)
BindData();


}

public void BindData()
{
DataTable table=(DataTable)Cache["lion"];
if(table==null)
{




// Add the column to a new DataTable.


            

table=new DataTable("table");
  
DataColumn myColumn = new DataColumn();
myColumn.DataType = System.Type.GetType("System.Int32");
myColumn.ColumnName="ID";
myColumn.AutoIncrement = true;
myColumn.AutoIncrementSeed = 1;
myColumn.AutoIncrementStep = 1;
table.Columns.Add(myColumn); 
this.sqlDataAdapter1.Fill(table);
Cache["lion"]=table;
}
grid.DataKeyField = "ID";
grid.DataSource=table;
grid.DataBind();
}
public void UpdateGrid(object src,DataGridCommandEventArgs e)
{
DataTable table=(DataTable)Cache["Webdiyer"];
int id=(int)grid.DataKeys[e.Item.ItemIndex]-1;
table.Rows[id][1]=((TextBox)e.Item.Cells[2].Controls[0]).Text;
table.Rows[id][2]=((TextBox)e.Item.Cells[3].Controls[0]).Text;
table.Rows[id][3]=((TextBox)e.Item.Cells[4].Controls[0]).Text;
Cache["Webdiyer"]=table;
grid.EditItemIndex=-1;
BindData();
}

public  void ClickTest(object src,EventArgs e)
{
LinkButton hlink=(LinkButton)src;
if(hlink.CommandName=="Edit")
{
grid.EditItemIndex=int.Parse(hlink.CommandArgument)-1;
BindData();

((System.Web.UI.WebControls.TextBox)(this.grid.Items[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex].Cells[1].Controls[0])).Style.Add("width","100%");
((System.Web.UI.WebControls.TextBox)(this.grid.Items[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex].Cells[1].Controls[0])).Style.Add("border-width","0px");
((System.Web.UI.WebControls.TextBox)(this.grid.Items[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex].Cells[1].Controls[0])).ReadOnly = true;
((System.Web.UI.WebControls.TextBox)(this.grid.Items[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex].Cells[2].Controls[0])).Style.Add("width","100%");
((System.Web.UI.WebControls.TextBox)(this.grid.Items[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex].Cells[2].Controls[0])).Style.Add("border-width","0px");
((System.Web.UI.WebControls.TextBox)(this.grid.Items[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex].Cells[2].Controls[0])).ReadOnly = true;
((System.Web.UI.WebControls.TextBox)(this.grid.Items[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex].Cells[3].Controls[0])).Style.Add("width","100%");
((System.Web.UI.WebControls.TextBox)(this.grid.Items[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex].Cells[3].Controls[0])).Style.Add("border-width","0px");
((System.Web.UI.WebControls.TextBox)(this.grid.Items[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex].Cells[3].Controls[0])).ReadOnly = true;
if(int.Parse(this.Request.Params["ID_Grid1_Td_ID"])!=-1 && int.Parse(this.Request.Params["ID_Grid1_Td_ID"])!=0 )
{  // if (this.Request.Params["ID_Grid1_Td_ID"].ToString())

((System.Web.UI.WebControls.TextBox)(this.grid.Items[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex].Cells[int.Parse(this.Request.Params["ID_Grid1_Td_ID"])].Controls[0])).ReadOnly = false;
((System.Web.UI.WebControls.TextBox)(this.grid.Items[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex].Cells[int.Parse(this.Request.Params["ID_Grid1_Td_ID"])].Controls[0])).Style.Add("text-align","center");
((System.Web.UI.WebControls.TextBox)(this.grid.Items[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex].Cells[int.Parse(this.Request.Params["ID_Grid1_Td_ID"])].Controls[0])).Attributes.Add("onblur",Page.GetPostBackEventReference(this.grid.Items[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex].FindControl("updatebtn")));

}


}
else
{
DataTable table=(DataTable)Cache["lion"];
table.Rows[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex][2]=((TextBox)(this.grid.Items[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex].Cells[1].Controls[0])).Text;
table.Rows[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex][3]=((TextBox)(this.grid.Items[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex].Cells[2].Controls[0])).Text;
table.Rows[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex][4]=((TextBox)(this.grid.Items[((System.Web.UI.WebControls.DataGridItem)hlink.Parent.Parent).DataSetIndex].Cells[3].Controls[0])).Text;
Cache["lion"]=table;
grid.EditItemIndex=-1;
BindData();
}
}
public void BindScript(object src,DataGridItemEventArgs e)
{

if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
{
e.Item.Attributes.Add("onclick","if(!isNaN(event.srcElement.cellIndex)){document.all.item(\"ID_Grid1_Td_ID\").value=event.srcElement.cellIndex;}else{document.all.item(\"ID_Grid1_Td_ID\").value=-1}"+Page.GetPostBackEventReference(e.Item.FindControl("editbtn")));
}
}


public  void RemoveCache(object src,EventArgs e)
{
Cache.Remove("lion");
grid.EditItemIndex=-1;
BindData();
}


#5


#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{    
this.sqlDataAdapter1 = new System.Data.SqlClient.SqlDataAdapter();
this.sqlConnection1 = new System.Data.SqlClient.SqlConnection();
this.sqlSelectCommand1 = new System.Data.SqlClient.SqlCommand();
this.sqlInsertCommand1 = new System.Data.SqlClient.SqlCommand();
this.sqlUpdateCommand1 = new System.Data.SqlClient.SqlCommand();
this.sqlDeleteCommand1 = new System.Data.SqlClient.SqlCommand();
// 
// sqlDataAdapter1
// 
this.sqlDataAdapter1.DeleteCommand = this.sqlDeleteCommand1;
this.sqlDataAdapter1.InsertCommand = this.sqlInsertCommand1;
this.sqlDataAdapter1.SelectCommand = this.sqlSelectCommand1;
this.sqlDataAdapter1.TableMappings.AddRange(new System.Data.Common.DataTableMapping[] {
  new System.Data.Common.DataTableMapping("Table", "authors", new System.Data.Common.DataColumnMapping[] {
 new System.Data.Common.DataColumnMapping("au_id", "au_id"),
 new System.Data.Common.DataColumnMapping("au_lname", "au_lname"),
 new System.Data.Common.DataColumnMapping("au_fname", "au_fname"),
 new System.Data.Common.DataColumnMapping("phone", "phone"),
 new System.Data.Common.DataColumnMapping("address", "address"),
 new System.Data.Common.DataColumnMapping("city", "city"),
 new System.Data.Common.DataColumnMapping("state", "state"),
 new System.Data.Common.DataColumnMapping("zip", "zip"),
 new System.Data.Common.DataColumnMapping("contract", "contract")})});
this.sqlDataAdapter1.UpdateCommand = this.sqlUpdateCommand1;
// 
// sqlConnection1
// 
this.sqlConnection1.ConnectionString = "workstation id=GW;packet size=4096;user id=sa;data source=GW;persist security inf" +
"o=True;initial catalog=pubs;password=";
// 
// sqlSelectCommand1
// 
this.sqlSelectCommand1.CommandText = "SELECT au_id, au_lname, au_fname, phone, address, city, state, zip, contract FROM" +
" authors";
this.sqlSelectCommand1.Connection = this.sqlConnection1;
// 
// sqlInsertCommand1
// 
this.sqlInsertCommand1.CommandText = @"INSERT INTO authors(au_id, au_lname, au_fname, phone, address, city, state, zip, contract) VALUES (@au_id, @au_lname, @au_fname, @phone, @address, @city, @state, @zip, @contract); SELECT au_id, au_lname, au_fname, phone, address, city, state, zip, contract FROM authors WHERE (au_id = @au_id)";
this.sqlInsertCommand1.Connection = this.sqlConnection1;
this.sqlInsertCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@au_id", System.Data.SqlDbType.VarChar, 11, "au_id"));
this.sqlInsertCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@au_lname", System.Data.SqlDbType.VarChar, 40, "au_lname"));
this.sqlInsertCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@au_fname", System.Data.SqlDbType.VarChar, 20, "au_fname"));
this.sqlInsertCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@phone", System.Data.SqlDbType.VarChar, 12, "phone"));
this.sqlInsertCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@address", System.Data.SqlDbType.VarChar, 40, "address"));
this.sqlInsertCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@city", System.Data.SqlDbType.VarChar, 20, "city"));
this.sqlInsertCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@state", System.Data.SqlDbType.VarChar, 2, "state"));
this.sqlInsertCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@zip", System.Data.SqlDbType.VarChar, 5, "zip"));
this.sqlInsertCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@contract", System.Data.SqlDbType.Bit, 1, "contract"));
// 
// sqlUpdateCommand1
// 
this.sqlUpdateCommand1.CommandText = @"UPDATE authors SET au_id = @au_id, au_lname = @au_lname, au_fname = @au_fname, phone = @phone, address = @address, city = @city, state = @state, zip = @zip, contract = @contract WHERE (au_id = @Original_au_id) AND (address = @Original_address OR @Original_address IS NULL AND address IS NULL) AND (au_fname = @Original_au_fname) AND (au_lname = @Original_au_lname) AND (city = @Original_city OR @Original_city IS NULL AND city IS NULL) AND (contract = @Original_contract) AND (phone = @Original_phone) AND (state = @Original_state OR @Original_state IS NULL AND state IS NULL) AND (zip = @Original_zip OR @Original_zip IS NULL AND zip IS NULL); SELECT au_id, au_lname, au_fname, phone, address, city, state, zip, contract FROM authors WHERE (au_id = @au_id)";
this.sqlUpdateCommand1.Connection = this.sqlConnection1;
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@au_id", System.Data.SqlDbType.VarChar, 11, "au_id"));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@au_lname", System.Data.SqlDbType.VarChar, 40, "au_lname"));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@au_fname", System.Data.SqlDbType.VarChar, 20, "au_fname"));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@phone", System.Data.SqlDbType.VarChar, 12, "phone"));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@address", System.Data.SqlDbType.VarChar, 40, "address"));

#6


this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@city", System.Data.SqlDbType.VarChar, 20, "city"));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@state", System.Data.SqlDbType.VarChar, 2, "state"));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@zip", System.Data.SqlDbType.VarChar, 5, "zip"));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@contract", System.Data.SqlDbType.Bit, 1, "contract"));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_au_id", System.Data.SqlDbType.VarChar, 11, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "au_id", System.Data.DataRowVersion.Original, null));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_address", System.Data.SqlDbType.VarChar, 40, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "address", System.Data.DataRowVersion.Original, null));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_au_fname", System.Data.SqlDbType.VarChar, 20, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "au_fname", System.Data.DataRowVersion.Original, null));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_au_lname", System.Data.SqlDbType.VarChar, 40, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "au_lname", System.Data.DataRowVersion.Original, null));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_city", System.Data.SqlDbType.VarChar, 20, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "city", System.Data.DataRowVersion.Original, null));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_contract", System.Data.SqlDbType.Bit, 1, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "contract", System.Data.DataRowVersion.Original, null));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_phone", System.Data.SqlDbType.VarChar, 12, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "phone", System.Data.DataRowVersion.Original, null));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_state", System.Data.SqlDbType.VarChar, 2, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "state", System.Data.DataRowVersion.Original, null));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_zip", System.Data.SqlDbType.VarChar, 5, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "zip", System.Data.DataRowVersion.Original, null));
// 
// sqlDeleteCommand1
// 
this.sqlDeleteCommand1.CommandText = @"DELETE FROM authors WHERE (au_id = @Original_au_id) AND (address = @Original_address OR @Original_address IS NULL AND address IS NULL) AND (au_fname = @Original_au_fname) AND (au_lname = @Original_au_lname) AND (city = @Original_city OR @Original_city IS NULL AND city IS NULL) AND (contract = @Original_contract) AND (phone = @Original_phone) AND (state = @Original_state OR @Original_state IS NULL AND state IS NULL) AND (zip = @Original_zip OR @Original_zip IS NULL AND zip IS NULL)";
this.sqlDeleteCommand1.Connection = this.sqlConnection1;
this.sqlDeleteCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_au_id", System.Data.SqlDbType.VarChar, 11, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "au_id", System.Data.DataRowVersion.Original, null));
this.sqlDeleteCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_address", System.Data.SqlDbType.VarChar, 40, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "address", System.Data.DataRowVersion.Original, null));
this.sqlDeleteCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_au_fname", System.Data.SqlDbType.VarChar, 20, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "au_fname", System.Data.DataRowVersion.Original, null));
this.sqlDeleteCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_au_lname", System.Data.SqlDbType.VarChar, 40, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "au_lname", System.Data.DataRowVersion.Original, null));
this.sqlDeleteCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_city", System.Data.SqlDbType.VarChar, 20, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "city", System.Data.DataRowVersion.Original, null));
this.sqlDeleteCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_contract", System.Data.SqlDbType.Bit, 1, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "contract", System.Data.DataRowVersion.Original, null));
this.sqlDeleteCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_phone", System.Data.SqlDbType.VarChar, 12, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "phone", System.Data.DataRowVersion.Original, null));
this.sqlDeleteCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_state", System.Data.SqlDbType.VarChar, 2, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "state", System.Data.DataRowVersion.Original, null));
this.sqlDeleteCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_zip", System.Data.SqlDbType.VarChar, 5, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "zip", System.Data.DataRowVersion.Original, null));
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion
}
}

#7


<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="ls_yd_lr.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="grid" style="Z-INDEX: 101; LEFT: 96px; POSITION: absolute; TOP: 88px" runat="server"
OnItemDataBound="BindScript" AutoGenerateColumns="False">
<Columns>
<asp:TemplateColumn HeaderText="编号">
<ItemStyle HorizontalAlign="Center"></ItemStyle>
<ItemTemplate>
<%#DataBinder.Eval(Container.DataItem,"ID")%>
<asp:LinkButton Text='' runat="server" id="editbtn" CommandName="Edit" CommandArgument='<%#DataBinder.Eval(Container.DataItem,"ID")%>' OnClick="ClickTest"/>
</ItemTemplate>
<EditItemTemplate>
<%#DataBinder.Eval(Container.DataItem,"ID")%>
<asp:LinkButton id="updatebtn" Text='' runat="server" CommandName="Update" CommandArgument='<%#DataBinder.Eval(Container.DataItem,"ID")%>' OnClick="ClickTest"/>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn DataField="au_fname" HeaderText="第三列"></asp:BoundColumn>
<asp:BoundColumn DataField="au_fname" HeaderText="第四列"></asp:BoundColumn>
<asp:BoundColumn DataField="phone" HeaderText="第五列"></asp:BoundColumn>
</Columns>
</asp:DataGrid><INPUT id="ID_Grid1_Td_ID" style="Z-INDEX: 102; LEFT: 8px; WIDTH: 100px; POSITION: absolute; TOP: 8px"
type="text" name="ID_Grid1_Td_ID" runat="server">
</form>
</body>
</HTML>

#8


考过去可以直接运行,你试试吧..csdn 前一位高手写的.....

#9


上面的各位,请看明白我的问题:
1. 我已经能够在DataGrid中显示 Access/SQL Server/Oracle/MySql任意数据库中所需要的数据,不需要有人告诉我如何做DataBind的工作

2. 我已经能够点击某一行的任意位置都可以触发到事件,但前提是我必须手动加入一个Select LinkButton列,这是我不愿意做的。

上面的所有人都没有回答到关键点上。

我真正想问的是:为什么相同的客户端代码,在服务端不能得到相同的结果?

*本问题与制作服务件控件有点关系,即事件的触发机制,它与客户端的代码的关系。

#10


大家可以参看3个例子:

1. 直接生成脚本(没有Select LinkButton)
Http://HHYD.oicp.net:8081/Test/WebForm3.aspx

2. 直接生成脚本,并且有Select LinkButton
Http://HHYD.oicp.net:8081/Test/WebForm4.aspx

3. 直接生成脚本,并且有Select LinkButton,但将 Select LinkButton 隐藏(与 1 进行比较)
Http://HHYD.oicp.net:8081/Test/WebForm5.aspx


#11


http://www.cnblogs.com/lovecherry/archive/2005/05/15/155831.html

#12


在客户端用javascript 提交到服务器

 document.Form.submit()

#13


to LoveCherry(论成败,人生豪迈;大不了,重头再来!^_^) :
那上面仅仅有代码,没有说明。而且代码和我的很接近,没有参考价值。

to goody9807():
请注意,我生成的脚本中调用了 __doPostBack,它里面已经有 theform.submit();

#14


楼主你有没有仔细看我的代码?麻烦你在再一下
这样做,在grid的ItemDataBound事件中写
private void grdOD_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
e.Item.Attributes.Add("onmouseover","currentcolor=this.style.backgroundColor;this.style.backgroundColor='#319de5'");//改变当前行的颜色
e.Item.Attributes.Add("onmouseout","this.style.backgroundColor=currentcolor");//恢复当前行的颜色
e.Item.Attributes.Add("OnClick","openShowform(" + "'"+e.Item.Cells[1].Text.ToString()  +"','"+Server.UrlEncode(e.Item.Cells[4].Text)+"')");//点击该行的任一位置,触发onclick(写在前台的javascript我这里是打开一个窗口并传值)事件
//
}

#15


to codeangel(-- 与人方便,自已方便 --) :
麻烦你也看看我的代码:

if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem || e.Item.ItemType==ListItemType.SelectedItem)
  {
    e.Item.Attributes.Add("onclick","__doPostBack('"+sender.ClientID+"$_ctl"+(e.Item.ItemIndex+2).ToString()+"$_ctl0','')");
  }

和你的类似,点击某一行,就会触发__doPostBack方法,将数据提交到服务端

#16


先来接点分啊.

#17


to all:
请看 Http://HHYD.oicp.net:8081/Test/WebForm5.aspx 例子
它已经实现了我需要的功能,但是我必须手动增加一个Select LinkButton到 DataGrid中。

我希望能够不用增加Select LinkButton!


1. 直接生成脚本(没有Select LinkButton)
Http://HHYD.oicp.net:8081/Test/WebForm3.aspx

2. 直接生成脚本,并且有Select LinkButton
Http://HHYD.oicp.net:8081/Test/WebForm4.aspx

3. 直接生成脚本,并且有Select LinkButton,但将 Select LinkButton 隐藏(与 1 进行比较)
Http://HHYD.oicp.net:8081/Test/WebForm5.aspx

这3个例子是我逐步探索这个问题做的页面。它们都使用了我在最上面的代码,区别就在于是否有 Select LinkButton在DataGrid中,和Select LinkButton是否隐藏状态。

#18


都出来了,你还有什么问题?
1.可以将select linkbutton在datagrid中隐藏
2.可以隐藏一个(web或html)控件,在你的“__doPostBack”事件中将你选中的项的ID给这个隐藏控件。
当然你也可再加一个服务器控件的button
如:__doPostBack
function __doPostBack(PersonNO)
if(confirm('你确定要删除该人员吗?'))
{
document.all.txtPersonNo.value = PersonNO;//txtPersonNo是隐藏的
document.all.btnDelPerson.click();//btnDelPerson也是隐藏的 因为是它服务器控件所以你可以在他的里面写东西
}
3.用DataGrid的Item.CommandName的也可以操作

#19


你光做一个客户端的服务器提交命令,但这些事件并没有在服务端注册,你在何处接收呢?
另外,也不用太拘泥吧.用我写的方法,可以很好的实现你的目的,并且没有不方便之处,为什么不尝试一下呢?

#20


1. 在Page的类定义增加IPostBackEventHandler接口,例如:
public class MyPage : Page, IPostBackEventHandler

 
2. 在 ItemDataBound 事件中编写如下代码:
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
  if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem || e.Item.ItemType==ListItemType.SelectedItem)
  {
    e.Item.Attributes.Add("onclick",
      this.Page.GetPostBackEventReference(this,e.Item.ItemIndex));
  }
}

3. 加入一个事件处理程序。
void IPostBackEventHandler.RaisePostBackEvent(string eventArgument)
{
  int Index=Convert.ToInt16(eventArgument);
  this.SelectedIndex=Index;
  this.OnSelectedIndexChanged(EventArgs.Empty);
}

#21


煞费苦心地去猜测“sender.ClientID+"$_ctl"+(e.Item.ItemIndex+2).ToString()+"$_ctl0”未必是好事,这个结果只是恰好可以,但是你动一动DataGrid的不同Item的设置,就不行了。

用体系结构中已经设计好的方法,其实更简单可靠。

#22


mark

#23


关注。

自己再试试看。