求救,Datagridview数据绑定问题,在线等。

cuayi 2009-03-21 05:22:00
private void Instrall_Activated(object sender, EventArgs e)
{
DGVFill("MainBody");
this.dataGridView1.DataSource = new Data.xSystemDST().MainBody;

DataGridView DGV = dataGridView1;
DGV.Columns["pm"].Width = 40;
DGV.Columns["pm"].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
DGV.Columns["pm"].HeaderText = "编码";

DGV.Columns["name"].Width = 40;
DGV.Columns["name"].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
DGV.Columns["name"].HeaderText = "名称";

DGV.Columns["gg"].Width = 60;
DGV.Columns["gg"].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
DGV.Columns["gg"].HeaderText = "规格";

//DGV.Columns["zl"].Visible = false;
DGV.Columns["sl"].Visible = false;
DGV.Columns["mony"].Visible = false;
DGV.Columns["bz"].Visible = false;
}

private void DGVFill(string DataTableName)
{
Data.xSystemDST DST = new Data.xSystemDST();

SqlConnection Conn = new SqlConnection(ODBC.DataInstall.Datastr);
Conn.Open();
SqlDataAdapter dar = new SqlDataAdapter("Select [pm],[name],[gg],[zl],[sl],[mony] From [_Mainbody]", Conn);
DST.MainBody.Clear();
dar.Fill(DST, DataTableName);
Conn.Close();
}

包含xSystemDST.xsd其中有表MainBody
上面代码运行后DataGridview能正确显示从Sql数据库Fill到Dst表中的列名称,但其中的数据显示不出来
已确定Sql数据库要Fill的表中绝对含有数据
...全文
627 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
cuayi 2009-03-23
  • 打赏
  • 举报
回复
谢谢大家的意思,我已经将DGVFill过程重写了个类
class myTableFill
{
static string _connstr = null, _sqlstr = null, _tablename = null;

public static string myTableFill_Connstr { get { return _connstr; } set { _connstr = value; } }
public static string myTableFill_Sqlstr { get { return _sqlstr; } set { _sqlstr = value; } }
public static string myTableFill_TableName { get { return _tablename; } set { _tablename = value; } }

public static DataTable Fill()
{
try
{
if (_connstr == null || _sqlstr == null || _tablename == null)
{
return new DataTable();
}
Data.xSystemDST DST = new Data.xSystemDST();
SqlConnection Conn = new SqlConnection(_connstr);
SqlDataAdapter DAT = new SqlDataAdapter(_sqlstr, Conn);
DST.Tables[_tablename].Clear();
DAT.Fill(DST, _tablename);
Conn.Close();
return DST.Tables[_tablename];
}
catch
{
MessageBox.Show("错误:[201]\n\n代码块Program.myTableFill出现严重错误。\n数据库缓存未能正确建立,请检查与服务器是否正确连接。\n");
//Application.Exit();
return new DataTable();
}
}

}
cuayi 2009-03-23
  • 打赏
  • 举报
回复
private void Instrall_Activated(object sender, EventArgs e)
{
DGVFill("MainBody"); //这里只负责对DataSet的DataTable绑定 this.dataGridView1.DataSource = new Data.xSystemDST().MainBody.DefaultView; //这里才是对数据的显示
DataGridView DGV = dataGridView1;
DGV.Columns["pm"].Width = 40;
DGV.Columns["pm"].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
DGV.Columns["pm"].HeaderText = "编码";

DGV.Columns["name"].Width = 40;
DGV.Columns["name"].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
DGV.Columns["name"].HeaderText = "名称";

DGV.Columns["gg"].Width = 60;
DGV.Columns["gg"].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
DGV.Columns["gg"].HeaderText = "规格";

//DGV.Columns["zl"].Visible = false;
DGV.Columns["sl"].Visible = false;
DGV.Columns["mony"].Visible = false;
DGV.Columns["bz"].Visible = false;
}
liudeqing2008 2009-03-23
  • 打赏
  • 举报
回复
你也太粗心了吧!你看看你的代码:
private void DGVFill(string DataTableName)
{
Data.xSystemDST DST = new Data.xSystemDST();

SqlConnection Conn = new SqlConnection(ODBC.DataInstall.Datastr);
Conn.Open();
SqlDataAdapter dar = new SqlDataAdapter("Select [pm],[name],[gg],[zl],[sl],[mony] From [_Mainbody]", Conn);
DST.MainBody.Clear();
dar.Fill(DST, DataTableName);
Conn.Close();
}
DGVFill(string DataTableName) 方法返回的是一个空值当然不行了!你得返回一个数据集啊!改下让他有返回值的!例如:
private DataSet DGVFill(string DataTableName)
{
Data.xSystemDST DST = new Data.xSystemDST();

SqlConnection Conn = new SqlConnection(ODBC.DataInstall.Datastr);
Conn.Open();
SqlDataAdapter dar = new SqlDataAdapter("Select [pm],[name],[gg],[zl],[sl],[mony] From [_Mainbody]", Conn);
DST.MainBody.Clear();
dar.Fill(DST, DataTableName);
Conn.Close();
return DST;
}
这样在上面接收的时候接收到的就是一个dataset数据集了!
cuayi 2009-03-23
  • 打赏
  • 举报
回复
回复4楼:
列名称不是我自已写的,而是从DataTable读出来的时候他的名字是"pm",
我只是在DataGridview绑定完DataTable后,将列名称改为需要的中文而以
cuayi 2009-03-23
  • 打赏
  • 举报
回复
回复4楼:
DGVFill("MainBody");为:
private void DGVFill(string DataTableName)
{
Data.xSystemDST DST = new Data.xSystemDST();

SqlConnection Conn = new SqlConnection(ODBC.DataInstall.Datastr);
Conn.Open();
SqlDataAdapter dar = new SqlDataAdapter("Select [pm],[name],[gg],[zl],[sl],[mony] From [_Mainbody]", Conn);
DST.MainBody.Clear();
dar.Fill(DST, DataTableName);
Conn.Close();
}
xSystemDST 为 xSystemDST.xsd文件(DataSet的实体文件,需要在CrystalReport报表时设计报表用的,所以没用 DataSet Dst = new Dataset();)

DataGridView DGV = dataGridView1;将DGV定义为DataGridView类型,并赋值:this.dataGridView1
将设用时,比如 datagridview1.columns[object].width 可以用 DGV.columns[object].width
cuayi 2009-03-23
  • 打赏
  • 举报
回复
DGVFill("MainBody");
this.dataGridView1.DataSource = new Data.xSystemDST().MainBody;

DataGridView DGV = dataGridView1;
DGV.Columns["pm"].Width = 40;
DGV.Columns["pm"].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
DGV.Columns["pm"].HeaderText = "编码";

DGV.Columns["name"].Width = 40;
DGV.Columns["name"].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
DGV.Columns["name"].HeaderText = "名称";

DGV.Columns["gg"].Width = 60;
DGV.Columns["gg"].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
DGV.Columns["gg"].HeaderText = "规格";

//DGV.Columns["zl"].Visible = false;
DGV.Columns["sl"].Visible = false;
DGV.Columns["mony"].Visible = false;
DGV.Columns["bz"].Visible = false;


问题自已解决了,红色的部分改成:
this.dataGridView1.DataSource = new Data.xSystemDST().MainBody.DefaultView;
tukzer 2009-03-21
  • 打赏
  • 举报
回复
如果你要用Dataset绑定DataGridView,
应该要使DataGridViewColumn的DataPerprotyName和DataTable中的字段名保持一致
否则,你可以设置AutoGenerateColumns = true
你就可以看到那些列其实已经绑过来了
但是没有和你设置的列对应上去。
wesleyluo 2009-03-21
  • 打赏
  • 举报
回复
[Quote=引用楼主 cuayi 的帖子:]
private void Instrall_Activated(object sender, EventArgs e)
{
DGVFill("MainBody"); //你在这里怎么搞的,没看明白。你可以设置个全局DATASET,然后填充表"MAINBODY"到里面。
this.dataGridView1.DataSource = new Data.xSystemDST().MainBody;//这里就直接设置DATASET.Tables["MAINBODY"]

DataGridView DGV = dataGridView1; //你这里是什么意思?
DGV.Columns["pm"].Width = 40;
DGV.Columns["pm"].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
D…
[/Quote]
老兄,你那个列名称都是你自己写的,当然可以显示出来啦。
建议你先把数据显示出来了,然后再思考优化代码。
梦醒实分1 2009-03-21
  • 打赏
  • 举报
回复
DataList中显示的列不是从数据库读出来的吧,是上面的方法设置的,很明显吗,你下面的方法有问题啊。
z496926006 2009-03-21
  • 打赏
  • 举报
回复
似乎不太懂!?
jiyan1221 2009-03-21
  • 打赏
  • 举报
回复
DataGridView不用.DataBind()的来绑定数据么?

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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