关于c#事件的问题:
小弟正在看一个MIS的系统,对于其中的一个“事件产生”提出问题:
源代码:using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Windows.Forms;namespace ManageInfomationSystem
{
public partial class MaterielsInfo : Form
{
private DataSet ds = new DataSet();
private LinkDataBase link = new LinkDataBase();
private string sendTableName = "Materiels";
private string sendStrSQL = "select MaterielID as 序号,MaterielName as 名称,CategorieName as 种类" +
",UnitInStock as 库存,UnitPrice as [价格(元)],[Materiels].[Description] as 描述 from Materiels,Categories where " +
"[Materiels].CategorieID=[Categories].CategorieID"; public MaterielsInfo()
{
InitializeComponent();
} public MaterielsInfo(bool blShowToolBar)
{
InitializeComponent();
ds = link.SelectDataBase(sendStrSQL, sendTableName);
DataGridStateControl(blShowToolBar);
dgrd_MaterielsData.DataSource=ds.Tables[0];
//foreach(DataRelation a in ds.Tables[0].ParentRelations)
//{
// MessageBox.Show( a.ChildColumns.ToString());
//}
toolStrip1.Enabled = blShowToolBar;
} private void DataGridStateControl(bool blReadOnly)
{
DataGridTableStyle ts = new DataGridTableStyle();
ts.AlternatingBackColor = Color.LightGray;
ts.MappingName = ds.Tables[0].TableName;
ts.AllowSorting = false; int numCols = ds.Tables[0].Columns.Count;
for (int i = 0; i < numCols; i++)
{
if (blReadOnly == true)
{
if (i == 4)
{
DataTable tempTable = new DataTable();
tempTable.Columns.Add();
object[] rowValues = new object[] { "个", "盒", "支", "箱", "带" };
for (int j = 0; j < 5; j++)
{
tempTable.Rows.Add(tempTable.NewRow());
tempTable.Rows[j][0] = rowValues[j];
} DataGridComboBoxColumn aComboBoxColumn = new DataGridComboBoxColumn(tempTable, 0, 0);
aComboBoxColumn.MappingName = ds.Tables[0].Columns[i].ColumnName;
aComboBoxColumn.HeaderText = ds.Tables[0].Columns[i].ColumnName;
aComboBoxColumn.NullText = "";
ts.GridColumnStyles.Add(aComboBoxColumn);
}
else
{
DataGridTextBoxColumn aColumnTextColumn = new DataGridTextBoxColumn();
aColumnTextColumn.MappingName = ds.Tables[0].Columns[i].ColumnName;
aColumnTextColumn.HeaderText = ds.Tables[0].Columns[i].ColumnName;
aColumnTextColumn.NullText = "";
aColumnTextColumn.Format = "F";
ts.GridColumnStyles.Add(aColumnTextColumn);
}
}
else
{
DataGridNoActiveCellColumn aColumnTextColumn = new DataGridNoActiveCellColumn();
aColumnTextColumn.MappingName = ds.Tables[0].Columns[i].ColumnName;
aColumnTextColumn.HeaderText = ds.Tables[0].Columns[i].ColumnName;
aColumnTextColumn.NullText = "";
aColumnTextColumn.Format = "F";
ts.GridColumnStyles.Add(aColumnTextColumn);
}
}
dgrd_MaterielsData.TableStyles.Add(ts);
}
//*******************************************************
private void btn_Search_Click(object sender, EventArgs e)
{
string tempStrSQL =sendStrSQL+ " and MaterielName like '%" + txt_strSearchWord.Text.Trim() + "%'";
link.SelectDataBase(tempStrSQL, sendTableName);
} private void toolStripButton1_Click(object sender, EventArgs e)
{
try
{
int row = dgrd_MaterielsData.CurrentCell.RowNumber;
dgrd_MaterielsData.CurrentCell = new DataGridCell(row + 1, 0);
if (ds.HasChanges())
{
if (MessageBox.Show("确实要保存修改?", "提示", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
link.UpdateDataBase(ds.GetChanges(), sendTableName);
MessageBox.Show("数据保存成功!", "消息");
}
return;
}
else
{
MessageBox.Show("数据没有做任何修改", "消息");
return;
}
}
catch
{
MessageBox.Show("数据保存失败,请确认保存数据正确!", "提示");
return;
}
} private void toolStripButton2_Click(object sender, EventArgs e)
{
if (MessageBox.Show("确实要删除这条记录?", "提示", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
try
{
ds.Tables[0].Rows[dgrd_MaterielsData.CurrentCell.RowNumber].Delete();
link.UpdateDataBase(ds.GetChanges(), sendTableName);
MessageBox.Show("数据记录删除成功 !","消息");
}
catch
{
MessageBox.Show("数据记录不能删除!", "消息");
link.SelectDataBase(sendStrSQL, sendTableName);
return;
}
}
}
//*************************************
}
}link类代码如下:
using System;
using System.Data;
using System.Data.SqlClient;namespace ManageInfomationSystem
{
public class LinkDataBase
{
private string strSQL;
private SqlConnection myConnection = new SqlConnection(@"Data Source=(local);Initial Catalog=materielsMsys;Integrated Security=SSPI;");
private SqlCommandBuilder sqlCmdBld;
private DataSet ds = new DataSet();
private SqlDataAdapter da; public LinkDataBase()
{ } public DataSet SelectDataBase(string tempStrSQL, string tempTableName)
{
strSQL = tempStrSQL;
da = new SqlDataAdapter(strSQL, myConnection);
da.Fill(ds, tempTableName);
return ds;
} public DataTable SelectDataBase(string tempStrSQL)
{
DataSet tempDataSet = new DataSet();
da = new SqlDataAdapter(tempStrSQL, myConnection);
da.Fill(tempDataSet);
return tempDataSet.Tables[0];
} public DataSet UpdateDataBase(DataSet changedDataSet, string tempTableName)
{
da = new SqlDataAdapter(strSQL, myConnection);
sqlCmdBld = new SqlCommandBuilder(da);
da.Update(changedDataSet, tempTableName);
return changedDataSet;
} public int UpdateDataBase(string tempStrSQL)
{
myConnection.Open();
SqlCommand tempCommand = new SqlCommand(tempStrSQL, myConnection);
int intNumber = tempCommand.ExecuteNonQuery();
myConnection.Close();
return intNumber;
}
}
}
小弟正在看一个MIS的系统,对于其中的一个“事件产生”提出问题:
源代码:using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Windows.Forms;namespace ManageInfomationSystem
{
public partial class MaterielsInfo : Form
{
private DataSet ds = new DataSet();
private LinkDataBase link = new LinkDataBase();
private string sendTableName = "Materiels";
private string sendStrSQL = "select MaterielID as 序号,MaterielName as 名称,CategorieName as 种类" +
",UnitInStock as 库存,UnitPrice as [价格(元)],[Materiels].[Description] as 描述 from Materiels,Categories where " +
"[Materiels].CategorieID=[Categories].CategorieID"; public MaterielsInfo()
{
InitializeComponent();
} public MaterielsInfo(bool blShowToolBar)
{
InitializeComponent();
ds = link.SelectDataBase(sendStrSQL, sendTableName);
DataGridStateControl(blShowToolBar);
dgrd_MaterielsData.DataSource=ds.Tables[0];
//foreach(DataRelation a in ds.Tables[0].ParentRelations)
//{
// MessageBox.Show( a.ChildColumns.ToString());
//}
toolStrip1.Enabled = blShowToolBar;
} private void DataGridStateControl(bool blReadOnly)
{
DataGridTableStyle ts = new DataGridTableStyle();
ts.AlternatingBackColor = Color.LightGray;
ts.MappingName = ds.Tables[0].TableName;
ts.AllowSorting = false; int numCols = ds.Tables[0].Columns.Count;
for (int i = 0; i < numCols; i++)
{
if (blReadOnly == true)
{
if (i == 4)
{
DataTable tempTable = new DataTable();
tempTable.Columns.Add();
object[] rowValues = new object[] { "个", "盒", "支", "箱", "带" };
for (int j = 0; j < 5; j++)
{
tempTable.Rows.Add(tempTable.NewRow());
tempTable.Rows[j][0] = rowValues[j];
} DataGridComboBoxColumn aComboBoxColumn = new DataGridComboBoxColumn(tempTable, 0, 0);
aComboBoxColumn.MappingName = ds.Tables[0].Columns[i].ColumnName;
aComboBoxColumn.HeaderText = ds.Tables[0].Columns[i].ColumnName;
aComboBoxColumn.NullText = "";
ts.GridColumnStyles.Add(aComboBoxColumn);
}
else
{
DataGridTextBoxColumn aColumnTextColumn = new DataGridTextBoxColumn();
aColumnTextColumn.MappingName = ds.Tables[0].Columns[i].ColumnName;
aColumnTextColumn.HeaderText = ds.Tables[0].Columns[i].ColumnName;
aColumnTextColumn.NullText = "";
aColumnTextColumn.Format = "F";
ts.GridColumnStyles.Add(aColumnTextColumn);
}
}
else
{
DataGridNoActiveCellColumn aColumnTextColumn = new DataGridNoActiveCellColumn();
aColumnTextColumn.MappingName = ds.Tables[0].Columns[i].ColumnName;
aColumnTextColumn.HeaderText = ds.Tables[0].Columns[i].ColumnName;
aColumnTextColumn.NullText = "";
aColumnTextColumn.Format = "F";
ts.GridColumnStyles.Add(aColumnTextColumn);
}
}
dgrd_MaterielsData.TableStyles.Add(ts);
}
//*******************************************************
private void btn_Search_Click(object sender, EventArgs e)
{
string tempStrSQL =sendStrSQL+ " and MaterielName like '%" + txt_strSearchWord.Text.Trim() + "%'";
link.SelectDataBase(tempStrSQL, sendTableName);
} private void toolStripButton1_Click(object sender, EventArgs e)
{
try
{
int row = dgrd_MaterielsData.CurrentCell.RowNumber;
dgrd_MaterielsData.CurrentCell = new DataGridCell(row + 1, 0);
if (ds.HasChanges())
{
if (MessageBox.Show("确实要保存修改?", "提示", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
link.UpdateDataBase(ds.GetChanges(), sendTableName);
MessageBox.Show("数据保存成功!", "消息");
}
return;
}
else
{
MessageBox.Show("数据没有做任何修改", "消息");
return;
}
}
catch
{
MessageBox.Show("数据保存失败,请确认保存数据正确!", "提示");
return;
}
} private void toolStripButton2_Click(object sender, EventArgs e)
{
if (MessageBox.Show("确实要删除这条记录?", "提示", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
try
{
ds.Tables[0].Rows[dgrd_MaterielsData.CurrentCell.RowNumber].Delete();
link.UpdateDataBase(ds.GetChanges(), sendTableName);
MessageBox.Show("数据记录删除成功 !","消息");
}
catch
{
MessageBox.Show("数据记录不能删除!", "消息");
link.SelectDataBase(sendStrSQL, sendTableName);
return;
}
}
}
//*************************************
}
}link类代码如下:
using System;
using System.Data;
using System.Data.SqlClient;namespace ManageInfomationSystem
{
public class LinkDataBase
{
private string strSQL;
private SqlConnection myConnection = new SqlConnection(@"Data Source=(local);Initial Catalog=materielsMsys;Integrated Security=SSPI;");
private SqlCommandBuilder sqlCmdBld;
private DataSet ds = new DataSet();
private SqlDataAdapter da; public LinkDataBase()
{ } public DataSet SelectDataBase(string tempStrSQL, string tempTableName)
{
strSQL = tempStrSQL;
da = new SqlDataAdapter(strSQL, myConnection);
da.Fill(ds, tempTableName);
return ds;
} public DataTable SelectDataBase(string tempStrSQL)
{
DataSet tempDataSet = new DataSet();
da = new SqlDataAdapter(tempStrSQL, myConnection);
da.Fill(tempDataSet);
return tempDataSet.Tables[0];
} public DataSet UpdateDataBase(DataSet changedDataSet, string tempTableName)
{
da = new SqlDataAdapter(strSQL, myConnection);
sqlCmdBld = new SqlCommandBuilder(da);
da.Update(changedDataSet, tempTableName);
return changedDataSet;
} public int UpdateDataBase(string tempStrSQL)
{
myConnection.Open();
SqlCommand tempCommand = new SqlCommand(tempStrSQL, myConnection);
int intNumber = tempCommand.ExecuteNonQuery();
myConnection.Close();
return intNumber;
}
}
}
解决方案 »
- c# 二维数组的不重复值加入
- .net3.5、jquery-1.3.2、FlexiGrid问题
- c#调试模式下,有时候出现变量无法调试
- 用ClickOnce成功发布程序后,不能运行setup.exe不能安装,为啥?
- c# 能做像http://yjhy.com/那样的一键还原系统的功能吗
- socket 如何post 急在线等,贴代码~~~~~~~~~~~~~~~~
- 各位高手请帮帮忙,在线等关于用C#写个WinForm程序操作Access的问题。
- c# 通过循环怎么样才能重复执行应用程序
- DataTable的select问题
- 关于构造函数的小问题?
- DataGridView中,用方向键移动单元格时,单元格获得光标后就进入编辑状态而不是选择状态??如何实现
- 添加web引用时候地址是变的怎么办
把你感到有问题的代码,贴出来
我仅在 btn_Search_Click;private void btn_Search_Click;toolStripButton2_Click三个事件中改变了 “LINK” 对象,但是此前窗口(MaterielsInfo)已经打开,而且DataGrid(dgrd_MaterielsData)控件已经显示数据了。如果激发了上述3个事件后,DataGrid(dgrd_MaterielsData)控件又显示了新的查询数据。而对DataGrid(dgrd_MaterielsData)控件进行数据源设置仅仅是在窗口构造函数的时候,因此当点击上述三个按钮的时候因该DataGrid(dgrd_MaterielsData)不改变才是。为什么DataGrid(dgrd_MaterielsData)控件又显示了新的查询数据?在线等,谢谢大虾。
{
string tempStrSQL =sendStrSQL+ " and MaterielName like '%" + txt_strSearchWord.Text.Trim() + "% '";
link.SelectDataBase(tempStrSQL, sendTableName);
} DataGrid(dgrd_MaterielsData)只有构造函数的时候才对数据源赋值的,代码: public MaterielsInfo(bool blShowToolBar)
{
InitializeComponent();
ds = link.SelectDataBase(sendStrSQL, sendTableName);
DataGridStateControl(blShowToolBar);
dgrd_MaterielsData.DataSource=ds.Tables[0];
//foreach(DataRelation a in ds.Tables[0].ParentRelations)
//{
// MessageBox.Show( a.ChildColumns.ToString());
//}
toolStrip1.Enabled = blShowToolBar;
}
当ds里面的数据更新时,dgrd_MaterielsData也会自动更新;link.SelectDataBase(tempStrSQL, sendTableName); //语句改变了 ds的值
public MaterielsInfo() :this(false)
{
//InitializeComponent();
} public MaterielsInfo(bool blShowToolBar)
{
InitializeComponent();
ds = link.SelectDataBase(sendStrSQL, sendTableName);
DataGridStateControl(blShowToolBar);
dgrd_MaterielsData.DataSource=ds.Tables[0];
//foreach(DataRelation a in ds.Tables[0].ParentRelations)
//{
// MessageBox.Show( a.ChildColumns.ToString());
//}
toolStrip1.Enabled = blShowToolBar;
}
---》
DS改变
DataGrid的数据源就会跟着变
引用~~~~