GridView中每行后面有个LinkButton的编辑按钮,怎么提取主键 把你放按钮的列,改成模版列。然后可以设置这个按钮的CommandName、CommandArgument,改值可以绑定字段。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 具体给我说下好吗,就一点点代码,更新时where后面的条件 设置CommandArgument='<%# Eval("id")%>' 这个我有,有没有where后面条件。where id=?,问号是什么。怎么取id sql:id=@id,@id sqlparameter 不是很懂,我才学半个月,下面是我的代码帮我补全,谢谢大神啊。protected void Button7_Click(object sender, EventArgs e) { con.Open(); cmd = new SqlCommand("update Teams set TeamNo=@TeamNo,TeamName=@TeamName,TeamStrength=@TeamStrength,TeamLeader=@TeamLeader,TeamPoints=@TeamPoints,TeamAverage=@TeamAverage where TeamNo='" + , con);//上面是.cs中的,下面是aspx中的,帮我补全where后面具体怎么写,要编辑的时候,每行后面的LinkButton怎么用。<Columns> <asp:BoundField DataField="TeamNo" HeaderText="团队编号" SortExpression="TeamNo"/> <asp:BoundField DataField="TeamName" HeaderText="团队名称" SortExpression="TeamName"/> <asp:BoundField DataField="TeamStrength" HeaderText="团队人数" SortExpression="TeamStrength"/> <asp:BoundField DataField="TeamLeader" HeaderText="团队负责人" SortExpression="TeamLeader"/> <asp:BoundField DataField="TeamPoints" HeaderText="团队积分" SortExpression="TeamPoints"/> <asp:BoundField DataField="TeamAverage" HeaderText="团队平均积分" SortExpression="TeamAverage"/> <asp:TemplateField HeaderText="编辑" > <ItemTemplate> <asp:LinkButton ID="btnEditOrder" runat="server" Text="编辑" CommandName="EditOrder" CommandArgument='<%# Eval("TeamNo") %>' /> </ItemTemplate> </asp:TemplateField> protected void GridView2_RowCommand(object sender, GridViewCommandEventArgs e) {if (e.CommandName == "EditOrder") { div1.Visible = false; div2.Visible = true; con.Open(); int id = Convert.ToInt32(e.CommandArgument.ToString());//这个是取到的id 你给 GridView 设置上 DataKeyString 然后 你通过 GridView的编辑事件。里 e.Index 去 DataKeys[] 就可以得到你要的数据了 你设置Linkbutton的CommandArgument是你要抓的id,你执行sql的button是在按下linkbutton之后吗?如果是的话,建议你增加隐藏控件记录id的值,这样每次按下linkbutton这个隐藏控件的value就是你要抓的id,执行sql的button只要抓隐藏控件的值就OK LinkButton lb = sender as LinkButton;string id = lb.CommandArgument.Tostring();楼主试下这个,我以前写过,你看这个对不,不对在问 <asp:LinkButton ID="btnEditOrder" runat="server" Text="编辑" CommandName="EditOrder" OnCommand="SetMarried" CommandArgument='<%# Eval("TeamNo") %>'定义一个全局变量 public int teamno; //LinkButton的OnCommand事件的处理方法 public void SetMarried(Object sender, CommandEventArgs e) { temno=convert.toint32( e.CommandArgument.ToString());//强制转换 }temno这样就可以在别的地方用了。你的where之类的 有代码了,你可以看看GridView DataKeyName="TeamNo",弄不出来啊,急 谢谢,你的方法好像可以,但是为什么不能编辑呢,编辑时TeamNo不改,下面会说重复,这个不是更新吗,怎么会说重复,确定数据库中没有相同数据了。下面给了编辑的div,这是它的确定按钮事件。GridView1中间也有个编辑按钮,跟上面GridView2给的代码一样public int teamno; //LinkButton的OnCommand事件的处理方法 public void SetMarried(Object sender, CommandEventArgs e) { teamno = Convert.ToInt32(e.CommandArgument.ToString());//强制转换 } protected void Button7_Click(object sender, EventArgs e) { con.Open(); cmd = new SqlCommand("update Teams set TeamNo=@TeamNo,TeamName=@TeamName,TeamStrength=@TeamStrength,TeamLeader=@TeamLeader,TeamPoints=@TeamPoints,TeamAverage=@TeamAverage where TeamNo="+teamno , con); cmd.Parameters.Add("@TeamNo", SqlDbType.Int); cmd.Parameters.Add("@TeamName", SqlDbType.NVarChar); cmd.Parameters.Add("@TeamStrength", SqlDbType.Int); cmd.Parameters.Add("@TeamLeader", SqlDbType.NVarChar); cmd.Parameters.Add("@TeamPoints", SqlDbType.Int); cmd.Parameters.Add("@TeamAverage", SqlDbType.Decimal); //SqlDataAdapter myda=new SqlDataAdapter(); //myda.UpdateCommand=cmd; //myda.Update() String sql1 = "select TeamNo from Teams where TeamNo=" + TextBox11.Text.Trim(); String sql2 = "select TeamName from Teams where TeamNo=" + TextBox12.Text.Trim(); SqlCommand cmd1 = new SqlCommand(sql1, con); SqlCommand cmd2 = new SqlCommand(sql2, con); SqlDataReader sdr1 = cmd1.ExecuteReader(); sdr1.Read(); if (sdr1.HasRows) { Response.Write("<script>alert('已存在该团队编号,请您重新输入!')</script>"); sdr1.Close(); con.Close(); } else { sdr1.Close(); SqlDataReader sdr2 = cmd2.ExecuteReader(); sdr2.Read(); if (sdr2.HasRows) { Response.Write("<script>alert('已存在该团队名称,请您重新输入!')</script>"); sdr2.Close(); con.Close(); } else { cmd.Parameters["@TeamNo"].Value = TextBox11.Text.Trim(); cmd.Parameters["@TeamName"].Value = TextBox12.Text.Trim(); cmd.Parameters["@TeamStrength"].Value = TextBox13.Text.Trim(); cmd.Parameters["@TeamLeader"].Value = TextBox14.Text.Trim(); cmd.Parameters["@TeamPoints"].Value = TextBox15.Text.Trim(); cmd.Parameters["@TeamAverage"].Value = TextBox16.Text.Trim(); sdr2.Close(); cmd.ExecuteNonQuery(); con.Close(); init(); div2.Visible = false; } } bind(); } teamno = Convert.ToInt32(e.CommandArgument.ToString());//强制转换 设置断点跟着看看。是不是值一直不变还是。选中这行 按F9 前台这样绑定: <asp:LinkButton ID="btnEditOrder" runat="server" Text="编辑" CommandName="EditOrder" CommandArgument='<%# Eval("TeamNo") %>' /> </ItemTemplate>================后台这样取值:protected void GridView2_RowCommand(object sender, GridViewCommandEventArgs e) {if (e.CommandName == "EditOrder") { div1.……是正确的啊,不知道你想干什么?还有什么问题? 运行效果一样啊,跟没断点没区别,别让我用断点啊,我感觉你的那个没取到数值原因,因为数据不改按确认,还是会提示重复的,应该是没有取到teamno。急急急。上面代码你看看呢还是还需要什么代码 <asp:GridView ID="dvlist" runat="server" AutoGenerateColumns="False" OnRowCommand="dvlist_RowCommand"> <Columns> <asp:BoundField DataField="username" HeaderText="用户名" /> <asp:BoundField DataField="pass" HeaderText="pass" /> <asp:TemplateField HeaderText="编辑"> <ItemTemplate> <asp:Button ID="BtnUpdate" runat="server" Text="编辑" CommandName="UserUpdate" CommandArgument='<%# Eval("id") %>' /> <asp:Button ID="BtnDelete" runat="server" Text="删除" CommandName="UserDelete" CommandArgument='<%# Eval("username") %>' /> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> public void bind() { DataTable dt = WebCommon.DBObject.getData("select * from dbo.userinfo").Tables[0]; this.dvlist.DataSource = dt; this.dvlist.DataBind(); } protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) bind(); } protected void dvlist_RowCommand(object sender, GridViewCommandEventArgs e) { if (e.CommandName == "UserUpdate") { Response.Write(e.CommandArgument.ToString()); } if (e.CommandName == "UserDelete") { Response.Write(e.CommandArgument.ToString()); } } 是正确的啊,但是我在(请看15楼代码,中我要去到teamno的值取不到,编辑没用,在button,我是要取到那个值,15楼的button事件上面的方法如何改进)前台还有个 oncommand="SetMarried"后台public int teamno;//LinkButton的OnCommand事件的处理方法 public void SetMarried(Object sender, CommandEventArgs e) { teamno = Convert.ToInt32(e.CommandArgument.ToString());//强制转换 }但是取不到teamno,帮我看看呗,反正是不能更新,还需要什么代码说 客戶端增加代碼 <input id ="IDTEXT" runat= "server" value ="" visible="false"/><input id ="IDTEXT2" runat= "server" value ="" visible="false"/>protected void dvlist_RowCommand(object sender, GridViewCommandEventArgs e) { if (e.CommandName == "UserUpdate") { IDTEXT.Value = e.CommandArgument.ToString(); Response.Write(e.CommandArgument.ToString()); } if (e.CommandName == "UserDelete") { IDTEXT2.Value = e.CommandArgument.ToString(); Response.Write(e.CommandArgument.ToString()); } }其他需要抓值的地方直接用IDTEXT2.Value 就可以了,根據情況在合適的地方清空隱藏變量的值在需要用之前要判斷是否為空,因為你沒有點grid中的button這隱藏控件是沒有值的 说明运行界面在我的相册中,这个最好去看看,注意我的编辑按钮用的是LinkButton不是GridView自带的。我要取出的是button7_click事件中的teamno的值,下面给出具体代码:前台主要代码<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" Font-Size="9pt" OnRowDeleting="GridView1_RowDeleting" OnSorting="GridView1_Sorting" OnPageIndexChanging="GridView1_PageIndexChanging" OnRowCommand="GridView1_RowCommand" OnRowDataBound="GridView1_RowDataBound" AllowPaging="True" BackColor="White" BorderColor="White" BorderStyle="Ridge" BorderWidth="2px" CellPadding="3" CellSpacing="1" GridLines="None" AllowSorting="True" DataKeyNames="TeamNo"> <Columns> <asp:BoundField DataField="TeamNo" HeaderText="团队编号" SortExpression="TeamNo"/> <asp:BoundField DataField="TeamName" HeaderText="团队名称" SortExpression="TeamName"/> <asp:BoundField DataField="TeamStrength" HeaderText="团队人数" SortExpression="TeamStrength"/> <asp:BoundField DataField="TeamLeader" HeaderText="团队负责人" SortExpression="TeamLeader"/> <asp:BoundField DataField="TeamPoints" HeaderText="团队积分" SortExpression="TeamPoints"/> <asp:BoundField DataField="TeamAverage" HeaderText="团队平均积分" SortExpression="TeamAverage"/> <asp:TemplateField HeaderText="编辑" > <ItemTemplate> <asp:LinkButton ID="btnEditOrder" runat="server" Text="编辑" CommandName="EditOrder" CommandArgument='<%# Eval("TeamNo") %>' OnCommand="SetMarried"/> </ItemTemplate> </asp:TemplateField> <asp:CommandField HeaderText="删除" ShowDeleteButton="True" /> </Columns>后台主要代码public int teamno; //LinkButton的OnCommand事件的处理方法 public void SetMarried(Object sender, CommandEventArgs e) { teamno = Convert.ToInt32(e.CommandArgument.ToString());//强制转换 }//这里是根据上面的写的,取不到teamno,因此修改不成功 protected void Button7_Click(object sender, EventArgs e) { con.Open(); cmd = new SqlCommand("update Teams set TeamNo=@TeamNo,TeamName=@TeamName,TeamStrength=@TeamStrength,TeamLeader=@TeamLeader,TeamPoints=@TeamPoints,TeamAverage=@TeamAverage where TeamNo="+teamno , con);//我要取的就是这个teamno,这里是关键 cmd.Parameters.Add("@TeamNo", SqlDbType.Int); cmd.Parameters.Add("@TeamName", SqlDbType.NVarChar); cmd.Parameters.Add("@TeamStrength", SqlDbType.Int); cmd.Parameters.Add("@TeamLeader", SqlDbType.NVarChar); cmd.Parameters.Add("@TeamPoints", SqlDbType.Int); cmd.Parameters.Add("@TeamAverage", SqlDbType.Decimal); //SqlDataAdapter myda=new SqlDataAdapter(); //myda.UpdateCommand=cmd; //myda.Update() String sql1 = "select TeamNo from Teams where TeamNo=" + TextBox11.Text.Trim(); String sql2 = "select TeamName from Teams where TeamNo=" + TextBox12.Text.Trim(); SqlCommand cmd1 = new SqlCommand(sql1, con); SqlCommand cmd2 = new SqlCommand(sql2, con); SqlDataReader sdr1 = cmd1.ExecuteReader(); sdr1.Read(); if (sdr1.HasRows) { Response.Write("<script>alert('已存在该团队编号,请您重新输入!')</script>"); sdr1.Close(); con.Close(); } else { sdr1.Close(); SqlDataReader sdr2 = cmd2.ExecuteReader(); sdr2.Read(); if (sdr2.HasRows) { Response.Write("<script>alert('已存在该团队名称,请您重新输入!')</script>"); sdr2.Close(); con.Close(); } else { cmd.Parameters["@TeamNo"].Value = TextBox11.Text.Trim(); cmd.Parameters["@TeamName"].Value = TextBox12.Text.Trim(); cmd.Parameters["@TeamStrength"].Value = TextBox13.Text.Trim(); cmd.Parameters["@TeamLeader"].Value = TextBox14.Text.Trim(); cmd.Parameters["@TeamPoints"].Value = TextBox15.Text.Trim(); cmd.Parameters["@TeamAverage"].Value = TextBox16.Text.Trim(); sdr2.Close(); cmd.ExecuteNonQuery(); con.Close(); init(); div2.Visible = false; } } bind(); }这里是编辑按钮的id获得方法,就是这个id的值怎么能取到呢,这里的id跟teamno息息相关的。protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) {if (e.CommandName == "EditOrder") { con.Open(); int id = Convert.ToInt32(e.CommandArgument.ToString()); protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) {if (e.CommandName == "EditOrder") { con.Open(); Button7.CommandArgument=e.CommandArgument;//这里把linkbutton的参数赋值给button7.....} protected void Button7_Click(object sender, EventArgs e) { string id = (sender as Button).CommandArgument.ToString(); //或者string id = button7.CommandArgument.ToString(); }上面的方式是在GridView1_RowCommand把CommandArgument传递给按钮,这样button7事件中也可以获取到该CommandArgument了。或者也可以使用另外一种方式:在函数之外定义一个变量,在GridView1_RowCommand中把CommandArgument的值给变量。在button7事件中取该变量的值。 错误 2 无法将类型“object”隐式转换为“string”。存在一个显式转换(是否缺少强制转换?) d:\我的文档\Visual Studio 2005\WebSites\WebSite1\TeamManage.aspx.cs 305 39 d:\...\WebSite1\//这个是在rowcommand中提示的(Button7.CommandArgument=e.CommandArgument;)初学半个月,你说方法有些能理解,但是我不会实现。 GridViewRow drv = ((GridViewRow)(((LinkButton)(e.CommandSource)).Parent.Parent)); //此得出的值是表示那行被选中的索引值GridViewRow drv = (GridViewRow)((LinkButton)e.CommandSource).NamingContainer;//此得出的值是表示那行被选中的索引值在linkbutton控件的Command事件,利用sender的Parent获取GridView中的当前行。 protected void lbtnQianChu_Command(object sender, CommandEventArgs e) { LinkButton lb = (LinkButton)sender; DataControlFieldCell dcf = (DataControlFieldCell)lb.Parent; GridViewRow gvr = (GridViewRow)dcf.Parent; //此得出的值是表示那行被选中的索引值}LinkButton获取当前行或id办法http://ch-kexin.iteye.com/blog/566942 C# WINFORM 100请求SNMP远程访问类,谢谢。 vs 2008编译器 读取文件关于 xml文件反序列化的问题? 获取系统字体文件名 C# 网页源码下载 如何去除字符串前后的 关于线程同步的问题,附上完整代码,望大家帮忙解决!~~ 如何将字符串转换成数值型??? 路径(绝对路径 与 相对路径问题) 后缀名为.dz是什么文件??
这个我有,有没有where后面条件。where id=?,问号是什么。怎么取id
不是很懂,我才学半个月,下面是我的代码帮我补全,谢谢大神啊。
protected void Button7_Click(object sender, EventArgs e)
{
con.Open();
cmd = new SqlCommand("update Teams set TeamNo=@TeamNo,TeamName=@TeamName,TeamStrength=@TeamStrength,TeamLeader=@TeamLeader,TeamPoints=@TeamPoints,TeamAverage=@TeamAverage where TeamNo='" + , con);
//上面是.cs中的,下面是aspx中的,帮我补全where后面具体怎么写,要编辑的时候,每行后面的LinkButton怎么用。<Columns>
<asp:BoundField DataField="TeamNo" HeaderText="团队编号" SortExpression="TeamNo"/>
<asp:BoundField DataField="TeamName" HeaderText="团队名称" SortExpression="TeamName"/>
<asp:BoundField DataField="TeamStrength" HeaderText="团队人数" SortExpression="TeamStrength"/>
<asp:BoundField DataField="TeamLeader" HeaderText="团队负责人" SortExpression="TeamLeader"/>
<asp:BoundField DataField="TeamPoints" HeaderText="团队积分" SortExpression="TeamPoints"/>
<asp:BoundField DataField="TeamAverage" HeaderText="团队平均积分" SortExpression="TeamAverage"/>
<asp:TemplateField HeaderText="编辑" >
<ItemTemplate>
<asp:LinkButton ID="btnEditOrder" runat="server" Text="编辑" CommandName="EditOrder" CommandArgument='<%# Eval("TeamNo") %>' />
</ItemTemplate>
</asp:TemplateField>
{
if (e.CommandName == "EditOrder")
{
div1.Visible = false;
div2.Visible = true;
con.Open();
int id = Convert.ToInt32(e.CommandArgument.ToString());
//这个是取到的id
如果是的话,建议你增加隐藏控件记录id的值,这样每次按下linkbutton这个隐藏控件的value就是你要抓的id,执行sql的button只要抓隐藏控件的值就OK
string id = lb.CommandArgument.Tostring();
楼主试下这个,我以前写过,你看这个对不,不对在问
ID="btnEditOrder" runat="server" Text="编辑" CommandName="EditOrder" OnCommand="SetMarried" CommandArgument='<%# Eval("TeamNo") %>'定义一个全局变量 public int teamno;
//LinkButton的OnCommand事件的处理方法
public void SetMarried(Object sender, CommandEventArgs e)
{
temno=convert.toint32( e.CommandArgument.ToString());//强制转换
}
temno这样就可以在别的地方用了。你的where之类的
public int teamno; //LinkButton的OnCommand事件的处理方法
public void SetMarried(Object sender, CommandEventArgs e)
{
teamno = Convert.ToInt32(e.CommandArgument.ToString());//强制转换
} protected void Button7_Click(object sender, EventArgs e)
{
con.Open();
cmd = new SqlCommand("update Teams set TeamNo=@TeamNo,TeamName=@TeamName,TeamStrength=@TeamStrength,TeamLeader=@TeamLeader,TeamPoints=@TeamPoints,TeamAverage=@TeamAverage where TeamNo="+teamno , con);
cmd.Parameters.Add("@TeamNo", SqlDbType.Int);
cmd.Parameters.Add("@TeamName", SqlDbType.NVarChar);
cmd.Parameters.Add("@TeamStrength", SqlDbType.Int);
cmd.Parameters.Add("@TeamLeader", SqlDbType.NVarChar);
cmd.Parameters.Add("@TeamPoints", SqlDbType.Int);
cmd.Parameters.Add("@TeamAverage", SqlDbType.Decimal);
//SqlDataAdapter myda=new SqlDataAdapter();
//myda.UpdateCommand=cmd;
//myda.Update()
String sql1 = "select TeamNo from Teams where TeamNo=" + TextBox11.Text.Trim();
String sql2 = "select TeamName from Teams where TeamNo=" + TextBox12.Text.Trim();
SqlCommand cmd1 = new SqlCommand(sql1, con);
SqlCommand cmd2 = new SqlCommand(sql2, con);
SqlDataReader sdr1 = cmd1.ExecuteReader();
sdr1.Read();
if (sdr1.HasRows)
{
Response.Write("<script>alert('已存在该团队编号,请您重新输入!')</script>");
sdr1.Close();
con.Close();
}
else
{
sdr1.Close();
SqlDataReader sdr2 = cmd2.ExecuteReader();
sdr2.Read();
if (sdr2.HasRows)
{
Response.Write("<script>alert('已存在该团队名称,请您重新输入!')</script>");
sdr2.Close();
con.Close();
}
else
{
cmd.Parameters["@TeamNo"].Value = TextBox11.Text.Trim();
cmd.Parameters["@TeamName"].Value = TextBox12.Text.Trim();
cmd.Parameters["@TeamStrength"].Value = TextBox13.Text.Trim();
cmd.Parameters["@TeamLeader"].Value = TextBox14.Text.Trim();
cmd.Parameters["@TeamPoints"].Value = TextBox15.Text.Trim();
cmd.Parameters["@TeamAverage"].Value = TextBox16.Text.Trim();
sdr2.Close();
cmd.ExecuteNonQuery();
con.Close();
init();
div2.Visible = false;
}
}
bind();
}
<asp:LinkButton ID="btnEditOrder" runat="server" Text="编辑" CommandName="EditOrder" CommandArgument='<%# Eval("TeamNo") %>' />
</ItemTemplate>================
后台这样取值:
protected void GridView2_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "EditOrder")
{
div1.……
是正确的啊,不知道你想干什么?还有什么问题?
急急急。上面代码你看看呢还是还需要什么代码
<Columns>
<asp:BoundField DataField="username" HeaderText="用户名" />
<asp:BoundField DataField="pass" HeaderText="pass" />
<asp:TemplateField HeaderText="编辑">
<ItemTemplate>
<asp:Button ID="BtnUpdate" runat="server" Text="编辑" CommandName="UserUpdate" CommandArgument='<%# Eval("id") %>' />
<asp:Button ID="BtnDelete" runat="server" Text="删除" CommandName="UserDelete" CommandArgument='<%# Eval("username") %>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
public void bind()
{
DataTable dt = WebCommon.DBObject.getData("select * from dbo.userinfo").Tables[0];
this.dvlist.DataSource = dt;
this.dvlist.DataBind();
}
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
bind();
}
protected void dvlist_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "UserUpdate")
{
Response.Write(e.CommandArgument.ToString());
}
if (e.CommandName == "UserDelete")
{
Response.Write(e.CommandArgument.ToString());
}
}
是正确的啊,但是我在(请看15楼代码,中我要去到teamno的值取不到,编辑没用,在button,我是要取到那个值,15楼的button事件上面的方法如何改进)
前台还有个 oncommand="SetMarried"
后台
public int teamno;
//LinkButton的OnCommand事件的处理方法
public void SetMarried(Object sender, CommandEventArgs e)
{
teamno = Convert.ToInt32(e.CommandArgument.ToString());//强制转换
}
但是取不到teamno,帮我看看呗,反正是不能更新,还需要什么代码说
<input id ="IDTEXT2" runat= "server" value ="" visible="false"/>protected void dvlist_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "UserUpdate")
{
IDTEXT.Value = e.CommandArgument.ToString();
Response.Write(e.CommandArgument.ToString());
}
if (e.CommandName == "UserDelete")
{
IDTEXT2.Value = e.CommandArgument.ToString();
Response.Write(e.CommandArgument.ToString());
}
}
其他需要抓值的地方直接用IDTEXT2.Value 就可以了,根據情況在合適的地方清空隱藏變量的值
在需要用之前要判斷是否為空,因為你沒有點grid中的button這隱藏控件是沒有值的
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" Font-Size="9pt" OnRowDeleting="GridView1_RowDeleting"
OnSorting="GridView1_Sorting" OnPageIndexChanging="GridView1_PageIndexChanging" OnRowCommand="GridView1_RowCommand" OnRowDataBound="GridView1_RowDataBound"
AllowPaging="True" BackColor="White" BorderColor="White" BorderStyle="Ridge" BorderWidth="2px" CellPadding="3" CellSpacing="1" GridLines="None" AllowSorting="True" DataKeyNames="TeamNo">
<Columns>
<asp:BoundField DataField="TeamNo" HeaderText="团队编号" SortExpression="TeamNo"/>
<asp:BoundField DataField="TeamName" HeaderText="团队名称" SortExpression="TeamName"/>
<asp:BoundField DataField="TeamStrength" HeaderText="团队人数" SortExpression="TeamStrength"/>
<asp:BoundField DataField="TeamLeader" HeaderText="团队负责人" SortExpression="TeamLeader"/>
<asp:BoundField DataField="TeamPoints" HeaderText="团队积分" SortExpression="TeamPoints"/>
<asp:BoundField DataField="TeamAverage" HeaderText="团队平均积分" SortExpression="TeamAverage"/>
<asp:TemplateField HeaderText="编辑" >
<ItemTemplate>
<asp:LinkButton ID="btnEditOrder" runat="server" Text="编辑" CommandName="EditOrder" CommandArgument='<%# Eval("TeamNo") %>' OnCommand="SetMarried"/>
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField HeaderText="删除" ShowDeleteButton="True" />
</Columns>
后台主要代码
public int teamno; //LinkButton的OnCommand事件的处理方法
public void SetMarried(Object sender, CommandEventArgs e)
{
teamno = Convert.ToInt32(e.CommandArgument.ToString());//强制转换
}//这里是根据上面的写的,取不到teamno,因此修改不成功
protected void Button7_Click(object sender, EventArgs e)
{
con.Open();
cmd = new SqlCommand("update Teams set TeamNo=@TeamNo,TeamName=@TeamName,TeamStrength=@TeamStrength,TeamLeader=@TeamLeader,TeamPoints=@TeamPoints,TeamAverage=@TeamAverage where TeamNo="+teamno , con);//我要取的就是这个teamno,这里是关键 cmd.Parameters.Add("@TeamNo", SqlDbType.Int);
cmd.Parameters.Add("@TeamName", SqlDbType.NVarChar);
cmd.Parameters.Add("@TeamStrength", SqlDbType.Int);
cmd.Parameters.Add("@TeamLeader", SqlDbType.NVarChar);
cmd.Parameters.Add("@TeamPoints", SqlDbType.Int);
cmd.Parameters.Add("@TeamAverage", SqlDbType.Decimal);
//SqlDataAdapter myda=new SqlDataAdapter();
//myda.UpdateCommand=cmd;
//myda.Update()
String sql1 = "select TeamNo from Teams where TeamNo=" + TextBox11.Text.Trim();
String sql2 = "select TeamName from Teams where TeamNo=" + TextBox12.Text.Trim();
SqlCommand cmd1 = new SqlCommand(sql1, con);
SqlCommand cmd2 = new SqlCommand(sql2, con);
SqlDataReader sdr1 = cmd1.ExecuteReader();
sdr1.Read();
if (sdr1.HasRows)
{
Response.Write("<script>alert('已存在该团队编号,请您重新输入!')</script>");
sdr1.Close();
con.Close();
}
else
{
sdr1.Close();
SqlDataReader sdr2 = cmd2.ExecuteReader();
sdr2.Read();
if (sdr2.HasRows)
{
Response.Write("<script>alert('已存在该团队名称,请您重新输入!')</script>");
sdr2.Close();
con.Close();
}
else
{
cmd.Parameters["@TeamNo"].Value = TextBox11.Text.Trim();
cmd.Parameters["@TeamName"].Value = TextBox12.Text.Trim();
cmd.Parameters["@TeamStrength"].Value = TextBox13.Text.Trim();
cmd.Parameters["@TeamLeader"].Value = TextBox14.Text.Trim();
cmd.Parameters["@TeamPoints"].Value = TextBox15.Text.Trim();
cmd.Parameters["@TeamAverage"].Value = TextBox16.Text.Trim();
sdr2.Close();
cmd.ExecuteNonQuery();
con.Close();
init();
div2.Visible = false;
}
}
bind();
}
这里是编辑按钮的id获得方法,就是这个id的值怎么能取到呢,这里的id跟teamno息息相关的。
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "EditOrder")
{
con.Open();
int id = Convert.ToInt32(e.CommandArgument.ToString());
{
if (e.CommandName == "EditOrder")
{
con.Open();
Button7.CommandArgument=e.CommandArgument;//这里把linkbutton的参数赋值给button7.....
} protected void Button7_Click(object sender, EventArgs e)
{
string id = (sender as Button).CommandArgument.ToString();
//或者string id = button7.CommandArgument.ToString();
}
上面的方式是在GridView1_RowCommand把CommandArgument传递给按钮,这样button7事件中也可以获取到该CommandArgument了。或者也可以使用另外一种方式:
在函数之外定义一个变量,在GridView1_RowCommand中把CommandArgument的值给变量。在button7事件中取该变量的值。
错误 2 无法将类型“object”隐式转换为“string”。存在一个显式转换(是否缺少强制转换?) d:\我的文档\Visual Studio 2005\WebSites\WebSite1\TeamManage.aspx.cs 305 39 d:\...\WebSite1\
//这个是在rowcommand中提示的(Button7.CommandArgument=e.CommandArgument;)初学半个月,你说方法有些能理解,但是我不会实现。
GridViewRow drv = (GridViewRow)((LinkButton)e.CommandSource).NamingContainer;//此得出的值是表示那行被选中的索引值
在linkbutton控件的Command事件,利用sender的Parent获取GridView中的当前行。
protected void lbtnQianChu_Command(object sender, CommandEventArgs e)
{
LinkButton lb = (LinkButton)sender;
DataControlFieldCell dcf = (DataControlFieldCell)lb.Parent;
GridViewRow gvr = (GridViewRow)dcf.Parent; //此得出的值是表示那行被选中的索引值
}
LinkButton获取当前行或id办法http://ch-kexin.iteye.com/blog/566942