我正在使用带有asp转发器的表。我想将表数据检索到C#中的数据表。我怎么能这样做?
设计
<asp:Repeater runat="server" ID="rptItems">
<HeaderTemplate>
<table id="tblDetItems" border="1" style="font-size: 9pt; border-color: #A9A9A9;
position: relative; overflow-y: auto;" class="display" cellspacing="0">
<thead style="background: #808080; color: White; font-weight: bold; border-color: White;">
<tr>
<th style="width: 10px;">
SlNo.
</th>
<th style="width: 200px;">
Item Code
</th>
<th style="width: 300px;">
Description
</th>
<th style="width: 80px;">
Group
</th>
<th style="width: 100px;">
Standard Rate
</th>
<th style="width: 100px;">
Labour Charge
</th>
<th style="width: 100px;">
Recovery Cost
</th>
<th style="width: 80px;">
Active ID
</th>
</tr>
<tr style="background-color: Silver;">
<th style="width: 10px;">
<input type="text" runat="server" style="width: 60px;" id="txtslno" />
</th>
<th style="width: 200px;">
<input type="text" runat="server" style="width: 200px;" id="txtCode" />
</th>
<th style="width: 300px;">
<input type="text" runat="server" style="width: 300px;" id="txtDesc" />
</th>
<th style="width: 80px;">
<input type="text" runat="server" style="width: 80px;" id="txtGroup" />
</th>
<th style="width: 100px;">
<input type="text" runat="server" style="width: 100px;" id="txtStdRate" />
</th>
<th style="width: 100px;">
<input type="text" runat="server" style="width: 100px;" id="txtLbrCharge" />
</th>
<th style="width: 100px;">
<input type="text" runat="server" style="width: 100px;" id="txtRcvryCost" />
</th>
<th style="width: 80px;">
<select id="cmbUseId" runat="server" style="width: 80px;">
<option value="Y">Yes</option>
<option value="N">No</option>
</select>
</th>
</tr>
</thead>
<tbody>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td style="width: 10px; text-align: right; height: 13px;">
<%# Eval("sl_no")%>
</td>
<td style="width: 200px; height: 13px;">
<input type="text" runat="server" style="width: 190px; text-align: left; height: 13px;" id="txtCode" value='<%# Eval("item_cd")%>' onkeyup="return onkeyup_txtphystkv(this,event);" />
</td>
<td style="width: 300px; height: 13px;">
<%# Eval("item_desc")%>
</td>
<td style="width: 80px; height: 13px;">
<%# Eval("gp_cd")%>
</td>
<td style="width: 100px; text-align: right; height: 13px;">
<input type="text" runat="server" style="width: 100px; text-align: right; height: 13px;" id="txtStdRate" value='<%# Eval("std_rt")%>' onkeyup="return onkeyup_txtphystkv(this,event);" />
</td>
<td style="width: 100px; height: 13px;">
<input type="text" runat="server" style="width: 100px; text-align: right; height: 13px;" id="txtLbrCharge" value='<%# Eval("labour_charge")%>' onkeyup="return onkeyup_txtphystkv(this,event);" />
</td>
<td style="width: 100px; height: 13px;">
<input type="text" runat="server" style="width: 100px; text-align: right; height: 13px;" id="txtRcvryCost" value='<%# Eval("recovery_cost")%>' onkeyup="return onkeyup_txtphystkv(this,event);" />
</td>
<td style="width: 80px; text-align: right; height: 18px;">
<select id="cmbUseId" runat="server" style="width: 80px; height: 18px;">
<option value="Y" selected="selected">Yes</option>
<option value="N">No</option>
</select>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</tbody> </table>
</FooterTemplate>
</asp:Repeater>
答案 0 :(得分:1)
首先,需要将在转发器控件中输入的数据带到服务器。为此,控件(TextBoxes,Dropdown列表等)应该可以在后面的代码中访问。
您需要替换
<input type="text">
<select id="cmbUseId" runat="server">
与
<asp:TextBox id="<<appropriateId>>" runat="server" />
<asp:DropDownList id="<<dropdownListId1>>" runat="server">
<asp:ListItem Text="Yes" Value="Y" />
<asp:ListItem Text="No" Value="N" />
</asp:DropDownList>
点击按钮,您需要创建一个DataTable并向其添加适当的列。
var dataTable = new DataTable();
var column = new DataColumn();
column.ColumnName = <<columnname1>>;
column.DataType = <<columntype1>>;
dataTable.Columns.Add(column);
column = new DataColumn();
column.ColumnName = <<columnname2>>;
column.DataType = <<columntype2>>;
dataTable.Columns.Add(column);
//And So On.. to add necessary columns to the datatable.
然后循环遍历转发器的所有项目,访问每个项目的控件并在dataRow中填充它们,并在上面创建的表格中添加数据行。
foreach (RepeaterItem item in rptItems.Items)
{
var dataRow = dataTable.NewRow();
if (item.ItemType == ListItemType.Item)
{
var textBox1 = (TextBox)item.FindControl("<<textboxId1>>");
dataRow["<<columnname1>>"] = textBox1.Text;
var textBox2 = (TextBox)item.FindControl("<<textboxId2>>");
dataRow["<<columnname2>>"] = textBox2.Text;
//And So On... to retrive values from all the textboxes inside the item and set values of appropriate columns in dataRow;
var dropdownList = (DropDownList)item.FindControl("<<dropdownListId1>>")
dataRow["<<somecolumn>>"] = dropdownList.SelectedValue;
//Once values from all the controls of item are obtained and set in the dataRow;
datatable.Rows.Add(dataRow);
}
}