我有一个sqldatasource,它有一个非常简单的select语句,应该总是返回一行。我在页面上有文本框,我想从数据源填充该数据。我怎么能这样做文本框?如果数据库中没有数据,那么我希望文本框保持为空。我怎么能做到这一点?
<asp:Panel ID = "Panel2" runat="server" DefaultButton = "save" >
<fieldset style="width: 524px"><legend>Rouse InterChange Details</legend>
<asp:FormView runat="server" ID="MyFormView" DataSourceID="SqlDataSource3" DefaultMode="Edit">
<ItemTemplate >
<table>
<tr>
<td align="right">Interchange ID:</td>
<td align="left">
<asp:TextBox ID="txtIntID" runat="server" size="1" MaxLength = "2" Text='<%# Bind("Interchange_Id") %>'></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator8" ValidationGroup = "rouse" Display ="None" ControlToValidate = "txtIntID" runat="server" ErrorMessage="You Must Provide an Interchange ID."> </asp:RequiredFieldValidator>
<ajaxToolkit:ValidatorCalloutExtender ID="ValidatorCalloutExtender11" TargetControlID="RequiredFieldValidator8" HighlightCssClass="validatorCalloutHighlight" runat="server">
</ajaxToolkit:ValidatorCalloutExtender>
</td>
</tr>
<tr>
<td align="right">Sender ID:</td>
<td align="left">
<asp:TextBox ID="txtsender" runat="server" MaxLength = "15" ></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator9" ValidationGroup = "rouse" Display ="None" ControlToValidate = "txtsender" runat="server" ErrorMessage="You Must Provide a Sender ID."> </asp:RequiredFieldValidator>
<ajaxToolkit:ValidatorCalloutExtender ID="vce12" TargetControlID="RequiredFieldValidator9" HighlightCssClass="validatorCalloutHighlight" runat="server">
</ajaxToolkit:ValidatorCalloutExtender>
</td>
</tr>
<tr>
<td align="right">Interchange Standard ID:</td>
<td align="left">
<asp:TextBox ID="ISI" runat="server" size="1" MaxLength = "1" ></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator10" ValidationGroup = "rouse" Display ="None" ControlToValidate = "ISI" runat="server" ErrorMessage="You Must Provide an Interchange Standard ID."> </asp:RequiredFieldValidator>
<ajaxToolkit:ValidatorCalloutExtender ID="ValidatorCalloutExtender12" TargetControlID="RequiredFieldValidator10" HighlightCssClass="validatorCalloutHighlight" runat="server">
</ajaxToolkit:ValidatorCalloutExtender>
</td>
</tr>
<tr>
<td align="right">Version:</td>
<td align="left">
<asp:TextBox ID="Verstxt" runat="server" size="5" MaxLength = "5" ></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator11" ValidationGroup = "rouse" Display ="None" ControlToValidate = "Verstxt" runat="server" ErrorMessage="You Must Provide a Version."> </asp:RequiredFieldValidator>
<ajaxToolkit:ValidatorCalloutExtender ID="ValidatorCalloutExtender13" TargetControlID="RequiredFieldValidator11" HighlightCssClass="validatorCalloutHighlight" runat="server">
</ajaxToolkit:ValidatorCalloutExtender>
</td>
</tr>
<tr>
<td align="right">Functional ID:</td>
<td align="left">
<asp:TextBox ID="FuncID" runat="server" size="1" MaxLength = "2" ></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator12" ValidationGroup = "rouse" Display ="None" ControlToValidate = "FuncID" runat="server" ErrorMessage="You Must Provide a Functional ID."> </asp:RequiredFieldValidator>
<ajaxToolkit:ValidatorCalloutExtender ID="ValidatorCalloutExtender14" TargetControlID="RequiredFieldValidator12" HighlightCssClass="validatorCalloutHighlight" runat="server">
</ajaxToolkit:ValidatorCalloutExtender>
</td>
</tr>
<tr style="display:none">
<td align="right">Group Control #</td>
<td align="left">
<asp:TextBox ID="txtGroupcontrol" runat="server" size="6" MaxLength = "9" ></asp:TextBox>
</td>
</tr>
</table>
</ItemTemplate>
</asp:FormView>
<asp:SqlDataSource ID="SqlDataSource3" runat="server"
ConnectionString="connectionstring"
SelectCommand="select * from table1 "></asp:SqlDataSource>
</fieldset></asp:Panel>
答案 0 :(得分:3)
您应该考虑使用FormView控件来执行此操作。使用绑定控件比尝试将所有代码塞入页面的代码隐藏更加容易和清晰。我也觉得它使页面更容易维护,因为你没有管理所有的C#/ VB代码。
<asp:FormView runat="server" ID="MyFormView" DataSourceID="MySqlDataSource" DefaultMode="Edit">
<EditItemTemplate>
<table>
<tr>
<td align="right">Interchange ID:</td>
<td align="left">
<asp:TextBox ID="txtIntID" runat="server" Text='<%# Bind("InterchangeID") %>' size="1" MaxLength = "2"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator8" ValidationGroup = "rouse" Display ="None" ControlToValidate = "txtIntID" runat="server" ErrorMessage="You Must Provide an Interchange ID."></asp:RequiredFieldValidator>
<ajaxToolkit:ValidatorCalloutExtender ID="ValidatorCalloutExtender11" TargetControlID="RequiredFieldValidator8" HighlightCssClass="validatorCalloutHighlight" runat="server"> </ajaxToolkit:ValidatorCalloutExtender>
</td>
</tr>
<!-- rest of your table here -->
</table>
</EditItemTemplate>
</asp:FormView>
<asp:SqlDataSource runat="server" ID="MySqlDataSource"
SelectCommand="SELECT * FROM MyTable" ConnectionString="<%$ ConnectionStrings:MyConnectionString %>" >
</asp:SqlDataSource>
有关详细信息,请参阅以下链接:
答案 1 :(得分:1)
最简单的方法(我认为这样做)是在代码隐藏中编写所有数据访问和表单填充。但是,我有点困惑,你把它标记为C#和VB.net。我将很快用一些C#示例代码更新这篇文章;在此期间,您可以随意开始发表评论垃圾邮件。 :)
答案 2 :(得分:1)
我喜欢在后面的代码中使用它:
GridView1.DataSource = getQuery(ConnectionString, "select * from mytable");
GridView1.DataBind();
private DataTable getQuery(string ConnStr, string query)
{
DataTable dt = new DataTable();
try
{
using (SqlConnection conn = new SqlConnection(ConnStr))
using (SqlDataAdapter cmd = new SqlDataAdapter(query, conn))
cmd.Fill(dt);
}
catch { }
return dt;
}
当然并非所有细节都在这里
答案 3 :(得分:0)
我一直在C#中执行此操作,而不是从控件本身“默认”加载数据。这样我知道当我的网页加载时,我控制数据加载,而不是ASP!我的方法也很好地避免生成连接器,数据集和其他控件,只是为了从一行中获取一个数据,例如从一个表中获取。
SqlDataSource sdsClogdetails = (SqlDataSource)gvRow.FindControl("sdsCLdetails");
if (sdsClogdetails != null)
{
DataView dv = sdsClogdetails.Select(DataSourceSelectArguments.Empty) as DataView;
if (dv != null)
{
DataTable dt = dv.ToTable() as DataTable;
if (dt != null)
{
DataRow dr = (DataRow)dt.Rows[0];
txtCLOG.Text = dr.ItemArray[3].ToString();
}
}
}
因此在我的示例中,我想要将数据放入的ASP控件称为txtCLOG
,它是TextBox
控件。显然,数据位于数据集3单元格内。因此,如果您的数据源返回10列数据,那么我的示例会将第3列的数据引入文本框控件。
使用上面的代码或类似代码,我可以一举击中许多鸟类,而且我也不必管理处理内存中的控件。当然,更好的方法是使用USING
语句。