c#能不能实现这样的功能

hbbdhbbd 2009-03-12 09:15:38
web窗体中,我想把用dataset搜出来的数据动态写到table中,每一条数据对应一个table,有多少条数据就对应多少个table,table中的内容格式是事先定义的,只是把dataset中的数据赋值给table中的textbox文本,请高手指点一下啊
...全文
238 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
fysz007 2009-03-15
  • 打赏
  • 举报
回复
为什么 不用一个datatable 从datatable 中一个一个的取值,在放到txtebox 中呢??
  • 打赏
  • 举报
回复
如果所有的table样式都是一致,每个TextBox字段绑定也是一致,并且水平/垂直方向table数量都规范/一致的话,直接用repeat就可以了。。如果不符合上面的情况的话。。。就需要动态生成控件并Add到页面上了


/// <summary>
/// 增加记录输入项
/// </summary>
/// <param name="tempInt">当前为第几条记录(显示用)</param>
/// <param name="i">当前实际为第几条记录(生成用)</param>
private void AddRecord(int tempInt,int i)
{
//每条记录对应6行TableRow
TableRow[] tableRow = new TableRow[4];


#region row1 显示当前为第几条记录,并显示相关的删除按钮
//第一行 显示当前为第几条记录,并显示相关的删除按钮
TableRow row1 = new TableRow();

// row1.CssClass = "add_content";

row1.ID = "RecordRow1" + i.ToString();

TableCell[] tableCell1 = new TableCell[2];

//第一行第一单元格
TableCell tc10 = new TableCell();

//要重新排序时用到ID
tc10.ID = "tcSortNum" + i.ToString();

tc10.ColumnSpan = 2;
tc10.Text = "<b>  协议明细(" + tempInt.ToString() + ")</b>";
tc10.HorizontalAlign = HorizontalAlign.Left;

tableCell1[0] = tc10;

//第一行第二单元格
TableCell tc11 = new TableCell();

tc11.ColumnSpan = 2;

tc11.HorizontalAlign = HorizontalAlign.Right;
//删除按钮
LinkButton lb = new LinkButton();

lb.ID = "lbDelete" + i.ToString();
lb.Text = "删除这条明细   ";

//定义事件委托
lb.Click += new EventHandler(lb_Click);

//#FF8000
lb.ForeColor = Color.FromArgb(0xFF,0x80,0x00);

tc11.Controls.Add(lb);

tableCell1[1] = tc11;



row1.Cells.AddRange(tableCell1);

tableRow[0] = row1;

#endregion

#endregion

#region row2 显示费用类型、计价单位
TableRow row2 = new TableRow();

row2.CssClass = "add_content";

row2.ID = "RecordRow3" + i.ToString();

TableCell[] tableCell3 = new TableCell[4];

//第三行第一单元格
TableCell tc30 = this.AddTableCell(HorizontalAlign.Right,15);

tc30.Text = "费用类型:";

tableCell3[0] = tc30;

//第三行第二单元格
TableCell tc31 = this.AddTableCell(HorizontalAlign.Left,35);

DropDownList ddl = new DropDownList();

ddl.ID = "ddlPriTpID" + i.ToString();

ddl.DataTextField = "StaticName";
ddl.DataValueField = "StaticID";

ddl.DataSource = protoclKind;
ddl.DataBind();

ddl.Attributes.Add("onchange","selectChange(this,"+"'txtPriName"+i.ToString()+"')");

tc31.Controls.Add(ddl);

tableCell3[1] = tc31;

//第三行第三单元格
TableCell tc32 = this.AddTableCell(HorizontalAlign.Right,15);

tc32.Text = "计价单位:";

tableCell3[2] = tc32;

//第三行第四单元格
TableCell tc33 = this.AddTableCell(HorizontalAlign.Left,35);

this.TableCellAddTextBox(tc33,"txtUnitPrice" + i.ToString(),10);

tableCell3[3] = tc33;


row2.Cells.AddRange(tableCell3);

tableRow[1] = row2;
#endregion

#region row3 显示定价名称
TableRow row3 = new TableRow();

row3.CssClass = "add_content";

TableCell[] tableCell4 = new TableCell[2];

row3.ID = "RecordRow4" + i.ToString();

//第四行第一单元格
TableCell tc40 = this.AddTableCell(HorizontalAlign.Right,15);

tc40.Text = "定价名称:";

tableCell4[0] = tc40;

//第四行第二单元格
TableCell tc41 = this.AddTableCell(HorizontalAlign.Left,85);

this.TableCellAddTextBox(tc41,"txtPriName" + i.ToString(),100,92,ddl.Items[0].Text);

tc41.ColumnSpan = 3;

tableCell4[1] = tc41;

row3.Cells.AddRange(tableCell4);



tableRow[2] = row3;
#endregion

#region row4 显示单价、免费天数
TableRow row4 = new TableRow();

row4.CssClass = "add_content";

row4.ID = "RecordRow5" + i.ToString();

TableCell[] tableCell5 = new TableCell[4];

//第五行第一单元格
TableCell tc50 = this.AddTableCell(HorizontalAlign.Right,15);

tc50.Text = "单价:";

tableCell5[0] = tc50;

//第五行第二单元格
TableCell tc51 = this.AddTableCell(HorizontalAlign.Left,35);

this.TableCellAddTextBox(tc51,"txtPrice" + i.ToString(),20);

tableCell5[1] = tc51;

//第五行第三单元格
TableCell tc52 = this.AddTableCell(HorizontalAlign.Right,15);

tc52.Text = "免费数";

tableCell5[2] = tc52;

//第五行第四单元格
TableCell tc53 = this.AddTableCell(HorizontalAlign.Left,35);

this.TableCellAddTextBox(tc53,"txtFree" + i.ToString(),10,80,"0");

tableCell5[3] = tc53;


row4.Cells.AddRange(tableCell5);


tableRow[3] = row4;

#endregion

this.dtMain.Rows.AddRange(tableRow);
}


这个是我仿照chinahr项目经验部分作的。。。你可以修改下,其中一些方法没列出来,不过你可以通过名字看出它到底有什么作用
hbbdhbbd 2009-03-15
  • 打赏
  • 举报
回复
用过datalist,repeator控件,但感觉格式显示的都不好,不能象table显示的那么好,请问不用这些控件能不能做啊,就像我一开始说的那么做,哪个高手能给个代码例子???哭求
hbbdhbbd 2009-03-15
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 fysz007 的回复:]
为什么 不用一个datatable 从datatable 中一个一个的取值,在放到txtebox 中呢??
[/Quote]
从datatable中一个一个取值放到textbox中这个我知道怎么实现,关键是多条语句,怎样把每条数据依次放到table中,并对应每条数据显示一个table?高手能不能给个代码例子???
周公 2009-03-13
  • 打赏
  • 举报
回复
asp.net夜话之八:数据绑定控件
在asp.net中所有的数据库绑定控件都是从BaseDataBoundControl这个抽象类派生的,这个抽象类定义了几个重要属性和一个重要方法:DataSource属性:指定数据绑定控件的数据来源,显示的时候程序将会从这个数据源中获取数据并显示。DataSourceID属性:指定数据绑定控件的数据源控件的ID, 显示的时候程序将会根据这个ID找到相应的数据源控件,并利用这个数据源控件中指定方法获取数据并显示。DataBind()方法:当指定了数据绑定控件的DataSource属性或者DataSourceID属性之后,再调用DataBind()方法才会显示绑定的数据。并且在使用数据源时,会首先尝试使用DataSourceID属性标识的数据源,如果没有设置DataSourceID时才会用到DataSource属性标识的数据源。也就是说DataSource和DataSourceID两个属性不能同时使用。数据绑定控件的DataSource控件属性必须是一个可以枚举的数据源,如实现了ICollection、IEnumerable或IListSource接口的类的实例。
hbbdhbbd 2009-03-13
  • 打赏
  • 举报
回复
高手能不能给个详细的代码,关于datalist如何添加模版列,如何在模版里添加table~~~~~~
深海之蓝 2009-03-13
  • 打赏
  • 举报
回复
你说的table应该是页面的table吧
DataTable dt = dataset1.Table[0];//这里应该取到了 结果集
foreach(DataRow dr in dt.Rows)
{
//将每条记录插入到页面table中
//自己添加
}
ukyo1211 2009-03-13
  • 打赏
  • 举报
回复
值得学习下
cghjiushiwo 2009-03-13
  • 打赏
  • 举报
回复
直接在datalist,gridview的itemtemplate里面写你的HTML代码就行了,再在需要处绑定你的数据源的字段就行了。
如:
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("um_type") %>'></asp:Label>
<table>
<tr><td><%# Eval('字段') %></td><tr/>
</table>
</ItemTemplate>
wwb82954323 2009-03-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 herojams 的回复:]
HTML code<asp:repeater id="Repeater1"
datasourceid="SqlDataSource1"
runat="server">
<itemtemplate>
<table border="1">
<tr>
<td><b>Product ID</b></td>
<td><b>Product Name</b></td>
</tr>
<tr>
<td> <%# Eval("ProductID") %> </td>
<td> <%# Eval("ProductName") %> </td>

[/Quote]
顶,不过现在好像都习惯用DataList这个控件
_see_you_again_ 2009-03-12
  • 打赏
  • 举报
回复
<asp:repeater id="Repeater1"       
datasourceid="SqlDataSource1"
runat="server">
<itemtemplate>
<table border="1">
<tr>
<td><b>Product ID</b></td>
<td><b>Product Name</b></td>
</tr>
<tr>
<td> <%# Eval("ProductID") %> </td>
<td> <%# Eval("ProductName") %> </td>
</tr>
</table>
</itemtemplate>
</asp:repeater>

<asp:sqldatasource id="SqlDataSource1"
connectionstring="<%$ ConnectionStrings:NorthWindConnection%>"
selectcommand="SELECT ProductID, ProductName FROM [Products] Where ProductID <= 10"
runat="server">
</asp:sqldatasource>
_see_you_again_ 2009-03-12
  • 打赏
  • 举报
回复
用asp:repeater动态绑定
hbbdhbbd 2009-03-12
  • 打赏
  • 举报
回复
高手能不能给个代码例子,俺是菜鸟。。。。
  • 打赏
  • 举报
回复
采用模板来做啊,然后用字段名命名你的控件,然后去匹配datatable里的字段名,把对应的datarow里的值取出来填充到对象不就可以了?
wuyq11 2009-03-12
  • 打赏
  • 举报
回复
在datalist里添加模板列。在模板里添加table
<table>
<tr>
<asp:TextBox id="Txt1" Text='<%#Eval("")%>' runat="server"></asp:TextBox>
</tr>
</table>

111,126

社区成员

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

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

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