datagrid问题?
我的datagrid是动态绑定的,在绑定后如何再添加模版列(我希望添加到最后一列),还有动态绑定后怎么让datagrid的某一列不显示出来和某一列不能编辑。
DataTable dt= new DataTable();
//dt从数据库中取数据
........
this.DataGrid1.DataSource = dt.DefaultView ;
/*在这里动态添加列好像只能加到首列 */
this.DataGrid1.DataBind();
/*在这里又不能添加,好像因为datagrid不更新
datagrid有没有类似winform里的refresh让他更新一下
*/
问题点数:100、回复次数:20Top
1 楼elliot(!逸轩)回复于 2003-06-01 18:53:42 得分 0
在DataBind()前new一个TemplateColumn,设置相应属性,在DataGrid1.Columns.Add进去
DataGrid的DataBind相当于更新一下
如果觉得更新后才可以决定怎么添加模板列
那么先DataBind一下,添加后再DataBind一下Top
2 楼WSDOTNET(摇钱树)回复于 2003-06-01 19:02:44 得分 0
构造了模板列后,如何动态添加ItemTemplate?Top
3 楼elliot(!逸轩)回复于 2003-06-01 19:12:46 得分 0
不用添加,直接引用新TemplateColumn1.ItemTemplateTop
4 楼roarlion(哮狮)回复于 2003-06-01 19:15:39 得分 0
不行啊,在绑定dt后,datagrid1.Columns.Count怎么还是0?
动态加进去还是在首位。
Top
5 楼elliot(!逸轩)回复于 2003-06-01 19:21:44 得分 0
先将生成的TemplateColumn添加进datagrid1
然后再绑定dt啊
Top
6 楼roarlion(哮狮)回复于 2003-06-01 19:31:50 得分 0
我想把TemplateColumn放到最后一列啊Top
7 楼WSDOTNET(摇钱树)回复于 2003-06-01 19:35:21 得分 0
TO: elliot(!逸轩) :
直接引用新TemplateColumn1.ItemTemplate,可它=null啊?Top
8 楼elliot(!逸轩)回复于 2003-06-01 19:55:19 得分 100
添加不是加在最后一列么?
to WSDOTNET(摇钱树):
sorry,好像没有这么简单,不太清楚怎么做了Top
9 楼roarlion(哮狮)回复于 2003-06-01 20:01:35 得分 0
是啊,我试过了,而且运行
this.DataGrid1.DataSource = dt.DefaultView ;
this.DataGrid1.DataBind();
后 DataGrid1.Columns.count = 0 !!!
dt中绝对有数据,而且能显示出来
我快疯了
Top
10 楼xrll()回复于 2003-06-01 20:26:46 得分 0
现在帮你试验,请等候!!Top
11 楼roarlion(哮狮)回复于 2003-06-01 21:13:04 得分 0
谢啦!Top
12 楼xrll()回复于 2003-06-01 21:31:33 得分 0
全部列用动态生成的办法已经解决:
添加TemplateColumn,内部有三个字段:
void Bindgrid() {
if((Request.Params["ContractCategoryID"]== "1")&&(Request.Params["ID"]== "2")){
SqlDataAdapter myCommand = new SqlDataAdapter("SELECT Contractid, ContractName,ContractNumber, CustomerID, OrderDate,Otime,RequiredDate FROM SaleContractDetails WHERE ProfessionalID="+Request.Params["ProfessionalID"]+"ORDER BY ContractID DESC", MyConnection);
DataSet ds = new DataSet();
myCommand.Fill(ds, "SaleContractDetails");
TemplateColumn tc;
tc = new TemplateColumn();
tc.HeaderText = "合同信息";
tc.ItemTemplate = new DataGridTemplate(ListItemType.Item, "ContractName", "CompanyName", "RequiredDate");
tc.HeaderStyle.HorizontalAlign=HorizontalAlign.Center;
tc.ItemStyle.HorizontalAlign=HorizontalAlign.Left;
tc.ItemStyle.Width=(Unit)0.50;
tc.ItemStyle.Wrap = false;
MyDataGrid.Columns.Add(tc);
MyDataGrid.DataSource = ds.Tables["SaleContractDetails"].DefaultView;
MyDataGrid.DataBind();
}
}
Top
13 楼xrll()回复于 2003-06-01 21:32:41 得分 0
public class DataGridTemplate : ITemplate
{
ListItemType templateType;
string columnName1,columnName2,columnName3;
public DataGridTemplate(ListItemType type, string colname1,string colname2,string colname3)
{
templateType = type;
columnName1 = colname1;
columnName2 = colname2;
columnName3 = colname3;
}
public void InstantiateIn(System.Web.UI.Control container)
{
Literal lc = new Literal();
Literal lc2 = new Literal();
Literal lc3 = new Literal();
switch(templateType)
{
case ListItemType.Header:
lc.Text = "<B>" + columnName1 + "</B>";
container.Controls.Add(lc);
break;
case ListItemType.Item:
lc.Text = "<B>合同名称: </B>";
container.Controls.Add(lc);
lc.DataBinding += new EventHandler(TemplateControl_DataBinding);
lc2.Text = "<B>顾 客:</B> ";
container.Controls.Add(lc2);
lc2.DataBinding += new EventHandler(TemplateControl_DataBinding2);
lc3.Text = "<B>交付时间:</B> ";
container.Controls.Add(lc3);
lc3.DataBinding += new EventHandler(TemplateControl_DataBinding3);
break;
case ListItemType.EditItem:
TextBox tb = new TextBox();
tb.Text = "";
container.Controls.Add(tb);
break;
case ListItemType.Footer:
lc.Text = "<I>" + columnName1 + "</I>";
container.Controls.Add(lc);
break;
}
}
private void TemplateControl_DataBinding(object sender, System.EventArgs e)
{
Literal lc;
lc = (Literal) sender;
DataGridItem container = (DataGridItem) lc.NamingContainer;
lc.Text += ((DataRowView)container.DataItem)[columnName1].ToString()+"<br>";
}
private void TemplateControl_DataBinding2(object sender, System.EventArgs e)
{
Literal lc2;
lc2 = (Literal) sender;
DataGridItem container2 = (DataGridItem) lc2.NamingContainer;
lc2.Text += ((DataRowView)container2.DataItem)[columnName2].ToString()+"<br>";
}
private void TemplateControl_DataBinding3(object sender, System.EventArgs e)
{
Literal lc3;
lc3 = (Literal) sender;
DataGridItem container3 = (DataGridItem) lc3.NamingContainer;
lc3.Text += DateTime.Parse(((DataRowView)container3.DataItem)[columnName3].ToString()).ToString("yyyy-MM-dd")+"<br>";
}
}
Top
14 楼roarlion(哮狮)回复于 2003-06-01 22:01:58 得分 0
太复杂了,我换方案吧。
Top
15 楼OK521(拉登陪我打CS)回复于 2003-06-01 22:17:24 得分 0
dim ds as new dataset()
dim tb as datatable
dim tbcolumn as datacolumn
tb=new datatable("table")
tbcolumn=new datacolumn("id",gettype(int32))
tb.columns.add(tbcolumn)
ds.tables.add(tb)
链接数据的代码...
dad.fill(ds,"table")
datagrid.datasource=ds
datagrid.databind()
如果要增加一列自动增加在tbcolumn=new datacolumn("id",gettype(int32))下面加一行:
tbcolumn.autoincrement=true
Top
16 楼xrll()回复于 2003-06-01 22:26:34 得分 0
相比较动态添加HyperLinkColumn和BoundColumn要容易些:
HyperLinkColumn hc = new HyperLinkColumn();
hc = new HyperLinkColumn();
hc.HeaderText="详细内容";
hc.HeaderStyle.BackColor = Color.Black;
hc.HeaderStyle.ForeColor = Color.White;
hc.HeaderStyle.HorizontalAlign=HorizontalAlign.Center;
hc.ItemStyle.HorizontalAlign=HorizontalAlign.Center;
hc.HeaderStyle.Width=200;
hc.ItemStyle.Wrap = false;
hc.DataNavigateUrlField="ContractID";
hc.DataNavigateUrlFormatString = "javascript:window.open('SContractRecordDetails.aspx?ContractID={0}&ContractName="+ContractName+"','_blank','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,revisable=no,left=100,top=0,width=600,height=300');window.opener=null;window.close();";
hc.DataTextField="OTime";
hc.DataTextFormatString="{0}......";
hc.Target="_new";
MyDataGrid.Columns.Add(hc);
BoundColumn bc;
bc = new BoundColumn();
bc.HeaderText = "检查时间";
bc.DataField = "Otime";
bc.HeaderStyle.BackColor = Color.Black;
bc.HeaderStyle.ForeColor = Color.White;
bc.HeaderStyle.HorizontalAlign=HorizontalAlign.Center;
bc.ItemStyle.HorizontalAlign=HorizontalAlign.Center;
bc.HeaderStyle.Width=(Unit)0.20;
bc.DataFormatString="{0:d}";
bc.ItemStyle.Wrap = false;
MyDataGrid.Columns.Add(bc);
MyDataGrid.DataSource = ds.Tables["SaleContractDetails"].DefaultView;
MyDataGrid.DataBind();Top
17 楼roarlion(哮狮)回复于 2003-06-01 22:46:48 得分 0
数据过来了,可和ds的数据也显示出来了,也就是说有两列显示的是同样的内容!Top
18 楼xrll()回复于 2003-06-02 08:47:56 得分 0
MyDataGrid.AutoGenerateColumns = false;
Top
19 楼saiyang0312(赛杨0312)回复于 2003-06-02 09:38:30 得分 0
xrll()是好人Top
20 楼roarlion(哮狮)回复于 2003-06-02 09:57:46 得分 0
太感谢xrll() 了,你要在兰州我请你吃饭!Top




