注册 登录
编程论坛 ASP.NET技术论坛

问一个关于GridView 绑定数据的问题-------!

ymaozi 发布于 2007-08-30 09:46, 1315 次点击
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False" Width="768px">
<Columns>
<asp:HyperLinkField DataNavigateUrlFields="Pid" DataNavigateUrlFormatString="ad_showpinglun.aspx?Pid={0}" DataTextField="Pname" HeaderText="用户名" />
<asp:BoundField DataField="newID" HeaderText="评论标题" />
<asp:BoundField DataField="type" HeaderText="类型" />
<asp:BoundField DataField="Ptime" HeaderText="时间" />
<asp:BoundField DataField="pIP" HeaderText="IP" />
<asp:CommandField ShowSelectButton="True" />
<asp:CommandField ShowDeleteButton="True" />
</Columns>
</asp:GridView>

private void Binddata()
{
GridView1.DataSource = bs.ds("SELECT A.newID, A.title, B.type, B.newID AS Expr1, B.Pconent,B.Pid B.Ptime, B.Pname, B.pIP FROM dbo.tb_new A INNER JOIN dbo.tb_pingl B ON A.newID = B.newID", "pinglun");
GridView1.DataBind();
}

public System.Data.DataSet ds(string Sql,string TableName)
{
SqlConnection MyConnection = CreateCon();
MyConnection.Open();
SqlDataAdapter MyCommand=new SqlDataAdapter(Sql,MyConnection);
DataSet ds=new DataSet();//定义一个数据集
MyCommand.Fill(ds,TableName);
MyConnection.Close();
return ds;

}

这个绑定不了数据,什么原因呀!
我知道应该是字段问题,但应该怎么修改呢!希望各位大哥能相助!!!
12 回复
#2
zhjesse2007-08-30 09:57

DataGrid的相关操作

++++++++++++++++++++++++++datagrid绑定显示数据+++++++++++++++++++++++++++++++++
/*
============方法一===============================================
this.SetDataGridStyles("temp",this.dataGrid1);
this.dataGrid1.DataSource=ds;
this.dataGrid1.DataMember="temp";
============方法二=================================================
this.SetDataGridStyles("temp",this.dataGrid1);
this.dataGrid1.SetDataBinding(ds.Tables["temp"].DefaultView,"");
============方法三=================================================
this.SetDataGridStyles("temp",this.dataGrid1);
this.dataGrid1.DataSource=ds.Tables["temp"].DefaultView;
*/


#3
ymaozi2007-08-30 11:12
this.SetDataGridStyles("temp",this.dataGrid1);

这个,我咋找不到呢?

#4
zhjesse2007-08-30 11:52
SetDataGridStyles

一个函数,下面有,自己去研究吧

++++++++++++++++++++++++++++定制显示列datagrid++++++++++++++++++++++++++++
#region 定制显示列
public class ReadOnlyColumn : System.Windows.Forms.DataGridTextBoxColumn
{
protected override void Edit(
CurrencyManager source,
int rowNum,
Rectangle bounds,
bool readOnly,
string instantText,
bool cellIsVisible)
{
base.Edit(source,rowNum,bounds,readOnly,instantText,false);

}


}

public class ReadOnlyBoolColumn : System.Windows.Forms.DataGridBoolColumn
{
protected override void Edit(
CurrencyManager source,
int rowNum,
Rectangle bounds,
bool readOnly,
string instantText,
bool cellIsVisible)
{
base.Edit(source,rowNum,bounds,readOnly,instantText,false);

}


}

/// <summary>
/// 设置DATAGRID的列风格,允许自定义
/// </summary>
/// <param name="strDsTableName"></param>
/// <param name="dgSetStyles"></param>
public void SetDataGridStyles(string strDsTableName,DataGrid dgSetStyles)
{
///设置表的样式
DataGridTableStyle tsSelObj = new DataGridTableStyle();
tsSelObj.RowHeadersVisible = false;
tsSelObj.AllowSorting = false;
tsSelObj.MappingName = strDsTableName;

///设置表-行的宽度样式
tsSelObj.RowHeaderWidth = 1;

///设置列样式-2
ReadOnlyColumn ColStyle1 = new ReadOnlyColumn();
ColStyle1.MappingName = "no_content";
ColStyle1.HeaderText = "语句标识编号";
ColStyle1.Width = 50;
ColStyle1.ReadOnly = true;
tsSelObj.GridColumnStyles.Add(ColStyle1);

///设置列样式-3
ReadOnlyColumn ColStyle2 = new ReadOnlyColumn();
ColStyle2.MappingName = "contents";
ColStyle2.HeaderText = "语句";
ColStyle2.Width = 150;
ColStyle2.ReadOnly = true;
tsSelObj.GridColumnStyles.Add(ColStyle2);

///性别
ReadOnlyColumn ColStyle3 = new ReadOnlyColumn();
ColStyle3.MappingName = "detail";
ColStyle3.HeaderText = "语句详解";
ColStyle3.Width = 200;
ColStyle3.ReadOnly = true;
tsSelObj.GridColumnStyles.Add(ColStyle3);


if (dgSetStyles.TableStyles.Count > 0)
{
dgSetStyles.TableStyles.Clear();
}

dgSetStyles.TableStyles.Add(tsSelObj);

}
#endregion

#5
cyyu_ryh2007-08-30 12:54
pageLoad下

if(!ispostback)
{
BindData();
}
#6
梦灵儿2007-08-31 19:04

建议把SQL语句创建一个试图,然后在帮顶 。最后要问一句那个上面的bs是怎么来的
GridView1.DataSource = bs.ds("SELECT A.newID, A.title, B.type, B.newID AS Expr1, B.Pconent,B.Pid B.Ptime, B.Pname, B.pIP FROM dbo.tb_new A INNER JOIN dbo.tb_pingl B ON A.newID = B.newID", "pinglun");

应该改为这样不更好GridView1.DataSource = ds("SELECT A.newID, A.title, B.type, B.newID AS Expr1, B.Pconent,B.Pid B.Ptime, B.Pname, B.pIP FROM dbo.tb_new A INNER JOIN dbo.tb_pingl B ON A.newID = B.newID", "pinglun");直接绑?
最后按楼上的这个大哥说的这样帮顶在load中
pageLoad下

if(!ispostback)
{
BindData();
}

#7
ymaozi2007-09-01 11:38
SELECT A.newID, A.title, B.type, B.newID AS Expr1, B.Pconent,B.Pid B.Ptime, B.Pname, B.pIP FROM dbo.tb_new A INNER JOIN dbo.tb_pingl B ON A.newID = B.newID

这是我创建视图后,跑出来的!

不知道这么调用视图,所以就直接放出代码里了!

好象不能直接绑定吧!
#8
梦灵儿2007-09-01 19:01
倒......
你创建一个试图名啊.哎......然后直接插入一句试图语句就可以了啊
然后在调用这个方法啊
pageLoad下

if(!ispostback)
{
Binddata();//这个方法是你自己写的那个啊
}
#9
川流不息2007-09-01 20:52
楼主啊。bs.ds("SELECT A.newID, A.title, B.type, B.newID AS Expr1, B.Pconent,B.Pid B.Ptime, B.Pname, B.pIP FROM dbo.tb_new A INNER JOIN dbo.tb_pingl B ON A.newID = B.newID", "pinglun");传回来的是一个DataSet,不是一个DataTable
建议:先定义一个DataSet来接收这个方法传回的值,再去绑定 .DataSource=DS.Table[0];
#10
ymaozi2007-09-02 09:15

这个与是DataSet,DataTable有什么大的关系嘛?

其它的,我都是用dataset绑定的,这次我只是加了tb_new A ,tb_pingl B .才显示有问题!

我想应该是他对字段不认识吧!

#11
zw3798688722007-09-03 09:39
其实出现不能绑定无外乎就是:
1,数据库没数据
2,没DataBind
3,没设置数据原
4,数据代码错误
#12
梦灵儿2007-09-03 18:35
呵呵......DataSet返回的是一个结果集,datatable返回的是一张虚礼表呵呵你说有什么关系啊.......
#13
ymaozi2007-09-04 08:55


不用哪么奸的笑吧!

1