我有一个SqlDataSource,它向我的GridView提供数据.多数民众赞成我在我的表格上使用,因此我根本没有任何代码.但在某些地方我需要一个TRY CATCH块以防万一我的连接丢失了.我必须在哪里放置什么代码?
如果我收到错误,我希望我的lblMessage文本为"无连接".
编辑
我的Machine.aspx中的GridView
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False"
Height="209px" PageSize="7" Width="331px" AllowSorting="True"
DataSourceID="SqlDataSource1">
<Columns>
<asp:BoundField DataField="Total" HeaderText="Total" ReadOnly="True"
SortExpression="Total" DataFormatString="{0:R#,###,###}" >
<HeaderStyle HorizontalAlign="Left" />
</asp:BoundField>
<asp:BoundField DataField="b134_rmcid" HeaderText="Machine" ReadOnly="True"
SortExpression="b134_rmcid" >
<HeaderStyle HorizontalAlign="Left" />
</asp:BoundField>
<asp:BoundField DataField="b134_recdate" DataFormatString="{0:d/MM/yyyy}"
HeaderText="Date" ReadOnly="True" SortExpression="b134_recdate" >
<HeaderStyle HorizontalAlign="Left" />
</asp:BoundField>
</Columns>
</asp:GridView>
Run Code Online (Sandbox Code Playgroud)
我的连接就在我的Machine.aspx中的Gridview下
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:ODBC_ConnectionString %>"
ProviderName="<%$ ConnectionStrings:ODBC_ConnectionString.ProviderName %>"
SelectCommand="SELECT SUM(b134_nettpay) AS Total, b134_rmcid, b134_recdate FROM B134HRE"
onselected="SqlDataSource1_Selected">
</asp:SqlDataSource>
Run Code Online (Sandbox Code Playgroud)
我的Code.aspx.cs中的Code Behind文件中的代码
protected void Page_Load(object sender, EventArgs e)
{
lblError.Text …Run Code Online (Sandbox Code Playgroud) 我有大约10个下拉列表控件被填充.我想以编程方式创建它们,而不是复制/粘贴和修改每个字段.可以这样做吗?
这是他们中的一个.我想以编程方式添加10个下拉列表控件及其各自的SqlDataSource控件.
<asp:SqlDataSource ID = "ddlDAGender" runat=server
ConnectionString="<%$ ConnectionStrings:test1ConnectionString %>"
SelectCommand = "select GenderID,Gender from mylookupGender"
>
</asp:SqlDataSource>
<asp:Label ID="Label3" runat="server" Text="Gender"></asp:Label>
<asp:DropDownList ID="ddlGender" runat="server"
DataSourceid="ddlDAGender"
DataTextField="Gender" DataValueField="GenderID"
>
</asp:DropDownList>
Run Code Online (Sandbox Code Playgroud) 如何在后面的代码中为sqlDatasource设置sql参数?我这样想:
int id=1;
SqlDataSource1.SelectCommand = "SELECT * FROM categ WHERE id=@id";
SqlDataSourceArticole.SelectParameters.Add("@id", id);
// and also like this:
SqlDataSourceArticole.SelectParameters.Add("id", id);
Run Code Online (Sandbox Code Playgroud)
但它不起作用?我究竟做错了什么?
我在gridView中排序列时遇到问题.我想只选择列中名称相等的那些行,例如"已完成"
我的gridView包含很少的BoundField和TamplateFields.当我想通过适当的BoundField排序时,我将适当的字符串放到属性FilterExpression中.例如:
GridView中的字段:
<asp:BoundField DataField="identifier" HeaderText="Case number" SortExpression="identifier" />
所以我订了
FilterExpression = "[identifier] LIKE '%" + txtCaseNumber.Text + "%'"
其中identifier是BoundField中的DataField,在这种情况下,一切正常.但是当我想从名称与TempateField中的Fininish相同的列中选择适当的行时,我不知道该怎么做.TemplateField的Exaple看起来像这样:
<asp:TemplateField HeaderText="Status" SortExpression="Status">
<ItemTemplate>
<asp:Label ID="lblStatus" runat="server" Text='<%# Utils.ConvertToProcessStatus((int)Eval("status"))%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
Run Code Online (Sandbox Code Playgroud)
如果有人知道我怎么做?
感谢帮助.
没关系,但我忘了提到我有自己的用户控制器(ucCaseFilter),它由DropDownList组成,我从中选择状态.例如:Failed,InProgress,Finish ...在这个控件里面我创建公共属性Filter我想分配字符串值,它将选择适当的列并对它们进行排序.
Filter = "[???] = '" + ddlCaseStatus.SelectedValue + "'";
Run Code Online (Sandbox Code Playgroud)
然后在gridView中使用它:
FilterExpression = ucCaseFilter.Filter;
Run Code Online (Sandbox Code Playgroud)
我不知道如何得到列名称或其他方法,让我按"状态"列排序.
如果我不理解以前的答案,它指的是正确的解决方案
这有点傻但我有一个DetailsView,它使用sqlDataSource绑定到我的数据库中的记录.我的问题是我绑定的字段是一个位字段,(i,e 1或0),目前允许空值.我意识到这需要改变,但我还需要能够在GUI端处理DBNulls,以便应用程序自动知道如果值为DBNull,则将复选框的Checked属性设置为"false".目前我的模板字段看起来像这样.
</asp:TemplateField>
<asp:TemplateField HeaderText="Car:" HeaderStyle-Width="15%" ItemStyle-Width="85%">
<ItemTemplate>
<asp:Label ID="lblIsCar" runat="server" Text='<%# Eval("isCar") %>' />
</ItemTemplate>
<EditItemTemplate>
<asp:CheckBox ID="ckIsCar" runat="server" Checked='<%# Convert.ToBoolean(Eval("isCar"))%>' />
</EditItemTemplate>
</asp:TemplateField>
Run Code Online (Sandbox Code Playgroud)
在View模式下一切正常,但是当我单击详细信息视图控件上的Edit链接时,我收到以下错误:
无法将对象从DBNull强制转换为其他类型.
有什么建议?
更新:
我需要通过Bind()而不是Eval()来使用2路绑定,因为详细信息视图会对所选记录执行更新.如果我在绑定时使用Convert.ToBoolean(),则会抛出异常.我最终可能会使用CheckboxField.人们会认为有一种简单的方法可以解决这个问题,但我找不到它是不吉利的.
我有一种情况,我使用SQLDataSource的详细信息视图来更新SQL Server数据库中的记录.
我的问题是未完成的文本字段在数据库中转换为NULL.这会导致网站使用无法处理NULL DB值的第三方Web服务.
有没有办法,如果文本字段留空,当更新或插入发生时,数据转换为""(空字符串)而不是NULL值?
我正在关注此处列出的可搜索网格视图代码.我在使用时遇到了麻烦FilterExpression.我得到了例外:
'Name'运算符后缺少操作数...当异常发生时,FilterExpression ="WHERE Name like'spencer%'"
以下代码中发生异常:
protected void BindSGVData()
{
//hfSearchText has the search string returned from the grid.
if (hfSearchText.Value != "")
{
RidesSQL.FilterExpression = " WHERE " + hfSearchText.Value; //EXCEPTION HERE!
}
DataView dv = (DataView)RidesSQL.Select(new DataSourceSelectArguments());
//hfSort has the sort string returned from the grid.
if (hfSort.Value != "")
{
dv.Sort = hfSort.Value;
}
RideSGV.DataSource = dv;
try
{
RideSGV.DataBind();
}
catch (Exception exp)
{
//If databinding threw exception bcoz current page index …Run Code Online (Sandbox Code Playgroud) 假设我在.aspx页面上有某种数据网格或转发器,我的数据源是内联定义的:
<asp:SqlDataSource ID="ds1" runat="server" ConnectionString="..."
SelectCommand="some_proc" ...>
<SelectParameters>
<asp:ControlParameter ControlID="ddlYear" Name="Year" .. />
</SelectParameters>
</asp:SqlDataSource>
Run Code Online (Sandbox Code Playgroud)
如何调试我的代码,以便我可以确切地看到它绑定到网格时的值是什么?
我想在SqlDataSource SelectCommand中使用下拉列表的选定值.
<asp:DropDownList ID="ddlSelectRole" runat="server" ClientIDMode="Static">
<asp:ListItem></asp:ListItem>
<asp:ListItem>Client</asp:ListItem>
<asp:ListItem>Programming</asp:ListItem>
<asp:ListItem>Guest</asp:ListItem>
</asp:DropDownList>
Run Code Online (Sandbox Code Playgroud)
目前:
<asp:SqlDataSource ID="dsourceProgEmails" runat="server"
ConnectionString="<%$ ConnectionStrings:ProjectConnectionString %>"
SelectCommand="SELECT [Email] + ',' AS [text()] FROM [SiteUsers] WHERE [Role] = 'Programming' FOR XML PATH ('')">
</asp:SqlDataSource>
Run Code Online (Sandbox Code Playgroud)
我想的是:
<asp:SqlDataSource ID="dsourceProgEmails" runat="server"
ConnectionString="<%$ ConnectionStrings:ProjectConnectionString %>"
SelectCommand="SELECT [Email] + ',' AS [text()] FROM [SiteUsers] WHERE [Role] = '" + ddlSelectRole.SelectedValue + "' FOR XML PATH ('')">
</asp:SqlDataSource>
Run Code Online (Sandbox Code Playgroud)
代码隐藏是C#.
所以我有一个GridView设置为SqlDataSource.分页已启用,我有一个下拉菜单,可以更改每页显示的行数.我能够在单个页面中显示总行数,但我还想显示总行数.(像这样:"显示315的1 - 25").
所以,我的问题是:
1)如何获取整个DataSource的总行数?(不只是GridView)我的代码OnSelectedData方法不起作用并返回零.
2)如何让每个页面的数字显示不同?例如,在第二页上,它需要说"显示26 - 50 of 315"
这是我的代码(C#):
public partial class UserControls_BloombergAllUsersControl : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
int gridViewTotalRowCount;
protected void onSelectedData(object sender, SqlDataSourceStatusEventArgs e)
{
gridViewTotalRowCount = e.AffectedRows;
}
protected void GridView1_DataBound(object sender, EventArgs e)
{
int pageRowsCount = GridView1.Rows.Count;
Total1.Text = "Showing 1 - " + pageRowsCount.ToString() + " of " + gridViewTotalRowCount.ToString();
}
private void BindGridView1()
{
try
{
this.GridView1.DataBind();
if (Convert.ToInt32(DropDownList1.SelectedValue) != null)
GridView1.PageSize = Convert.ToInt32(DropDownList1.SelectedValue);
} …Run Code Online (Sandbox Code Playgroud) asp.net ×10
sqldatasource ×10
c# ×6
gridview ×2
.net ×1
datagridview ×1
dbnull ×1
detailsview ×1
rowcount ×1
search ×1
sql ×1
sql-server ×1
vb.net ×1