SelectCommand改变后 Gridview 的更新就失败了,求解。
问题是这样的我令GridView1 绑定 SqlDataSource1
之后用一个dropdownlist1 改变SqlDataSource1.SelectCommand 的值
之后当我使用dropdownlist1 改变SqlDataSource1.SelectCommand 后再使用GridView1
的更新的时候,我发现更新出现了些问题:假设通过修改了SqlDataSource1.SelectCommand
产生了1个结果(比如原来的第六项)但是我点击“编辑”后,girdview 显示的却是原来Gridview中第一行的数据 不知道是为什么?
麻烦各位了。。。
一个例子的源代码如下
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void DropDownList1_SelectedIndexChanged(object sender,
EventArgs e)
{
SqlDataSource1.SelectCommand = "select * from url where id = '6'";
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" runat="server"
AutoGenerateColumns="False" DataKeyNames="id"
DataSourceID="SqlDataSource1">
<Columns>
<asp:CommandField ShowDeleteButton="True"
ShowEditButton="True" />
<asp:BoundField DataField="id" HeaderText="id"
ReadOnly="True" SortExpression="id" />
<asp:BoundField DataField="name" HeaderText="name"
SortExpression="name" />
<asp:BoundField DataField="url" HeaderText="url"
SortExpression="url" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="Data Source=MyPC\SQLEXPRESS;Initial Catalog=TASK1;User
ID=sa;Password=sa"
DeleteCommand="DELETE FROM [url] WHERE [id] = @id"
InsertCommand="INSERT INTO [url] ([id], [name], [url]) VALUES (@id, @name,
@url)"
ProviderName="System.Data.SqlClient" SelectCommand="SELECT *
FROM [url]" UpdateCommand="UPDATE [url] SET [name] = @name, [url] = @url
WHERE [id] = @id">
<DeleteParameters>
<asp:Parameter Name="id" Type="Int16" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="name" Type="String" />
<asp:Parameter Name="url" Type="String" />
<asp:Parameter Name="id" Type="Int16" />
</UpdateParameters>
<InsertParameters>
<asp:Parameter Name="id" Type="Int16" />
<asp:Parameter Name="name" Type="String" />
<asp:Parameter Name="url" Type="String" />
</InsertParameters>
</asp:SqlDataSource>
<asp:DropDownList ID="DropDownList1" runat="server"
AutoPostBack="True"
OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"
DataSourceID="SqlDataSource1" DataTextField="id" DataValueField="id">
</asp:DropDownList></div>
</form>
</body>
</html>
--------------------编程问答-------------------- SqlDataSource 在每次刷新的时候回到你绑定的那一条T-SQL
怎么保存T-SQL我没研究过 就自己定义个连接还实在写。。。。 --------------------编程问答-------------------- 没有人知道么? --------------------编程问答-------------------- 终于解决了!
这是由于SQLDataSource中的SelectCommand是不被保留的。
所以当您修改了SelectCommand后,点击了编辑后,ASP.net会自动再重新生成一次SqlDataSource,而他的SelectCommand依旧使用的还是原先默认设置中的select * from Table。所以他会从去数据库中,将所有的数据都都回来。
解决的方法就是将SelectCommand加入到Session或是ViewState或是Cookie中,然后再每次页面Load的时候,将内容付给SqlDataSource
如下:
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
SqlDataSource1.SelectCommand = "select * from table4 where id = '6'";
Session["SqlDataSouce1Command"] = SqlDataSource1.SelectCommand;
}
protected void Page_Load(object sender, EventArgs e)
{
if (!(Session["SqlDataSouce1Command"] == null))
SqlDataSource1.SelectCommand = Session["SqlDataSouce1Command"].ToString();
}
--------------------编程问答-------------------- 其实不用这么麻烦的,直接在Page_Load中加入
if(!IsPostBack)
{
****
}
就可以了 --------------------编程问答-------------------- 加if(!IsPostBack){
}
还有个属性GridView里的一个属性DataKeyNames=ID --------------------编程问答--------------------
一般都是这样写的,很对 --------------------编程问答-------------------- 谢啦分享
补充:.NET技术 , ASP.NET