我的野蛮代码

minlove99 2002-07-26 11:22:52
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 ProjectAdmin
{
/// <summary>
/// WebForm4 的摘要说明。
/// </summary>
public class WebForm4 : System.Web.UI.Page
{
protected Microsoft.Web.UI.WebControls.TreeView

TreeView1;
protected System.Data.DataSet ds;
protected System.Data.SqlClient.SqlDataAdapter da;
protected System.Web.UI.WebControls.DataGrid

DataGrid1;
protected System.Web.UI.WebControls.Button delbtn;
protected System.Data.SqlClient.SqlConnection

sqlconn;
protected System.Data.SqlClient.SqlDataAdapter

nextda;
protected System.Data.SqlClient.SqlDataAdapter

myCommand;
protected System.Data.SqlClient.SqlCommand

DeleteCommand;

private void Page_Load(object sender,

System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!IsPostBack)
{
BindGrid();
}

}

#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN:该调用是 ASP.NET Web 窗体设计

器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.sqlconn = new

System.Data.SqlClient.SqlConnection();
this.TreeView1.SelectedIndexChange += new

Microsoft.Web.UI.WebControls.SelectEventHandler(this.TreeView1_Sel

ectedIndexChange);
this.delbtn.Click += new

System.EventHandler(this.delbtn_Click);
//
// sqlconn
//
this.sqlconn.ConnectionString = "data

source=PCLXM;initial catalog=KcyAdminData;integrated

security=SSPI;persist s" +
"ecurity info=False;user

id=sa;workstation id=PCLXM;packet size=4096";
this.Load += new

System.EventHandler(this.Page_Load);

}
#endregion

private void delbtn_Click(object sender,

System.EventArgs e)
{
CheckBox SelectItem;
nextda = new

System.Data.SqlClient.SqlDataAdapter();
nextda.DeleteCommand = new

System.Data.SqlClient.SqlCommand("DELETE FROM dengji WHERE 工程编

号 = @gcbh1",sqlconn);


nextda.DeleteCommand.Parameters.Add("@gcbh1",SqlDbType.VarChar,80,

"工程编号");
DataGrid1.DataKeyField="工程编号";
for(int i=0;i<DataGrid1.Items.Count;i++)
{
SelectItem =

(CheckBox)DataGrid1.Items[i].FindControl("SelectBox");
if(SelectItem.Checked)
{


nextda.DeleteCommand.Parameters["@gcbh1"].Value =

DataGrid1.DataKeys[(int)DataGrid1.Items[i].ItemIndex];
sqlconn.Open();


nextda.DeleteCommand.ExecuteNonQuery();
sqlconn.Close();
BindGrid();
}
}
}

public void BindGrid()
{
string lll =

TreeView1.GetNodeFromIndex(TreeView1.SelectedNodeIndex).Text;
myCommand = new

System.Data.SqlClient.SqlDataAdapter("SELECT 工程编号,登记日期,工

程级别,建设单位,工程地点,联系人,工程负责人,任务去向 FROM dengji

WHERE 工程编号 = @gcbh",sqlconn);


myCommand.SelectCommand.Parameters.Add("@gcbh",SqlDbType.VarChar,8

0,"工程编号");


myCommand.SelectCommand.Parameters["@gcbh"].Value = lll;
DataSet ds = new DataSet();
sqlconn.Open();
myCommand.Fill(ds);
DataGrid1.DataSource=ds;
DataGrid1.DataBind();
sqlconn.Close();
}

private void TreeView1_SelectedIndexChange(object

sender, Microsoft.Web.UI.WebControls.TreeViewSelectEventArgs e)
{
//BindGrid();
string llll =

TreeView1.GetNodeFromIndex(TreeView1.SelectedNodeIndex).Text;
da = new

System.Data.SqlClient.SqlDataAdapter("SELECT 工程编号,登记日期,工

程级别,建设单位,工程地点,联系人,工程负责人,任务去向 FROM dengji

WHERE 任务去向 = @gcbh",sqlconn);


da.SelectCommand.Parameters.Add("@gcbh",SqlDbType.VarChar,80,"任务

去向");
da.SelectCommand.Parameters["@gcbh"].Value

= llll;
DataSet ds = new DataSet();
sqlconn.Open();
da.Fill(ds,"dengji");
DataGrid1.DataSource=ds.Tables["dengji"];
DataGrid1.DataKeyField = "工程编号";
DataGrid1.DataBind();
sqlconn.Close();
}



treeview1节点的text对应数据库的"任务去向"这个字段。按纽 delbtn 的

事件负责删除所选择的一条或多条记录,他是datagrid1之外的一个控件。

datagrid1里绑定了一个CheckBox的模板列,通过他选择一条或多条记录。

所出现的问题是:

1: 运行程序后,treeview1默认的已选择节点为:信息中心。可是 任

务去向 = “信息中心”的数据记录却并没有绑定到datagrid1里去
datagrid1里并没有显示任何数据,而 任务去向 = “信息中心”

的数据纪录是存在的。

2: 当我选择一条纪录或多条纪录并单击delbtn后,页面提交后

datagrid不显示任何数据。而我想得到的却是:删除了所选纪录后,
datagrid1还要显示删除之后的所有纪录。到数据库里去察看。不

论我选择的是一条还是多条纪录,删除的总是所选纪录中位置最下
的一条纪录,这是为什么?

3: 如果private void TreeView1_SelectedIndexChange()函数里调用

函数BindGrid(),并将函数里其他的代码删除,则无论选择那个节点
datagrid1里总是显示为空,这是为什么?


拜托各位了。
...全文
109 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
sheyanfen 2002-08-12
  • 打赏
  • 举报
回复
比如:要查询工程编号=“001”并且工程负责人=“aa”的记录
DropDownList1当前值为“工程编号”,DropDownList2当前值为“and”,语句可以这样写:

string selectsql="SELECT 工程编号,登记日期,工程级别,建设单位,工程地点,联系人,工程负责人,任务去向 FROM dengji ";
selectsql +=" where " +DropDownList1.SelectedItem.Text +"='001' " +DropDownList2.SelectedItem.Text +" 工程负责人='aa'";

sqlda.SelectCommand = new System.Data.SqlClient.SqlCommand(selectsql,sqlconn);

在测试的时候可以将selectsql语句输出来看看是否正确,只要注意一下字符串的操作就可以了。
GumPGZ 2002-07-27
  • 打赏
  • 举报
回复
把BindGrid()移到for外面

这样还不对么?

minlove99 2002-07-27
  • 打赏
  • 举报
回复
谢谢你,你能帮我解决下第二个问题吗?
GumPGZ 2002-07-27
  • 打赏
  • 举报
回复
nextda.DeleteCommand.Parameters["@gcbh1"].Value = DataGrid1.DataKeys[(int)DataGrid1.Items[i].ItemIndex];
sqlconn.Open();
nextda.DeleteCommand.ExecuteNonQuery();
sqlconn.Close();
BindGrid();


你删除后马上BindGrid(),你选择的记录已经消失了吧

所以把BindGrid()移到for外面
minlove99 2002-07-27
  • 打赏
  • 举报
回复
我结了其他的贴子,又得了10分,也一并加上了,本来10分就很让我难为情了
minlove99 2002-07-27
  • 打赏
  • 举报
回复
这个问题我已经搞定了,让我苦笑不得的是:完全是我的疏忽,不好意思。
但还有一点东西需要你帮忙:
为什么不能删除多条记录,而只能删除一条,不论你选的是一条还是多条?
这是负责删除的函数:
private void delbtn_Click(object sender, System.EventArgs e)
{
CheckBox SelectItem;
nextda = new System.Data.SqlClient.SqlDataAdapter();
nextda.DeleteCommand = new System.Data.SqlClient.SqlCommand("DELETE FROM dengji WHERE 工程编号 = @gcbh1",sqlconn);
nextda.DeleteCommand.Parameters.Add("@gcbh1",SqlDbType.VarChar,80,"工程编号");
DataGrid1.DataKeyField="工程编号";
for(int i=0;i<DataGrid1.Items.Count;i++)
{
SelectItem = (CheckBox)DataGrid1.Items[i].FindControl("SelectBox");
if(SelectItem.Checked)
{
nextda.DeleteCommand.Parameters["@gcbh1"].Value = DataGrid1.DataKeys[(int)DataGrid1.Items[i].ItemIndex];
sqlconn.Open();
nextda.DeleteCommand.ExecuteNonQuery();
sqlconn.Close();
BindGrid();
}
}
}

对不起,我还有一个问题,我可真是个问题少年,不好意思:
这是我的一个查询语句
sqlda.SelectCommand = new System.Data.SqlClient.SqlCommand("SELECT 工程编号,登记日期,工程级别,建设单位,工程地点,联系人,工程负责人,任务去向 FROM dengji WHERE _____ = @gcbh ",sqlconn);
其中的"_____"是我从一个dropdownlist里读出的字段名称,请问这该怎样实现???
如果我想在加个条件,用于连接的and 或 or需要从 dropdownlist里读出,又该怎样实现?
GumPGZ 2002-07-27
  • 打赏
  • 举报
回复
明白了,有几件事情是要搞清楚

1.TreeView1_SelectedIndexChange()是否能取道treeview的节点
如果取道了,那么对datagird重新进行数据bind,调用BindGrid
2.delbtn是否工作正常,你可以先测试一下,如果他不能按你的要求工作,
那调试就没什么意义了,先不要关treeview,你就先测试一下这个按钮

大体上也就这两个问题,我觉得第二个要出问题,
其次每次对datagrid操作完毕都要调用bindgrid()
minlove99 2002-07-27
  • 打赏
  • 举报
回复
谢谢你对我的帮助,我详细的说一下我程序的思路:
整个页面的结构是这样的:
在其左侧为一个treeview控件,页面的主体为以datagrid控件,页面的下面是一个button。

treeview1节点的text对应数据库的"工程编号"这个字段。按纽 delbtn 的
事件负责删除所选择的一条或多条记录,他是datagrid1之外的一个控件。
datagrid1里绑定了一个CheckBox的模板列,通过他选择一条或多条记录。

程序运行并进入页面后,则程序就会首选调用函数BindGrid(),执行数据库连接,并读取
treeview的默认的已选的节点的text,并把他传递给参数@gcbh,如果有满足“工程编号“
=@gcbh的记录,则会执行数据绑定,在datagrid里显示出来。

点击treeview的一个节点后,则激发 TreeView1_SelectedIndexChange()函数,读取节点的text,并把他传递给参数@gcbh,如果有满足“工程编号“
=@gcbh的记录,则会执行数据绑定,在datagrid里显示出来。

通过checkbox选择一条或多条datagrid里的记录,然后点击删除按钮delbtn,则激发函数
delbtn_Click(),执行删除操作。
具体思路就是这样的,麻烦你了!!
minlove99 2002-07-27
  • 打赏
  • 举报
回复
当然对了,我的第二个问题是:
这是我的一个查询语句
sqlda.SelectCommand = new System.Data.SqlClient.SqlCommand("SELECT 工程编号,登记日期,工程级别,建设单位,工程地点,联系人,工程负责人,任务去向 FROM dengji WHERE _____ = @gcbh ",sqlconn);
其中的"_____"是我从一个dropdownlist里读出的字段名称,请问这该怎样实现???
如果我想在加个条件,用于连接的and 或 or需要从 dropdownlist里读出,又该怎样实现?
我已经说过了的,我知道这样有点得寸近尺,可我还是要拜托你,拜托了
GumPGZ 2002-07-26
  • 打赏
  • 举报
回复
你的代码太乱,你的程序流程我也没看懂

提示:
每一次对datagrid操作完毕(包括,翻页,修改,删除)都要重新连数据库,重新邦定.

其次你好像没有取到treeview的值吧,如果不是postback的话我估计你取不到
而如果把treeview的autopostback属性设为true,又是很烦.

你先说你程序的功能,执行流程,需要取得那些数据等
这样别人才能给你看看

62,046

社区成员

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

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

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

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