У меня есть SqlDataSource, который передает данные моему GridView. Это все, что я использую в своей форме, поэтому у меня совсем нет кода. Но где-то мне нужен блок TRY CATCH на случай, если мое соединение потеряется. Какой код я должен разместить где?
Если я получу ошибку, я хочу, чтобы мой текст lblMessage был "Нет соединения".
Edit
Мой GridView в моем Machine.aspx
<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>
My Connection прямо под моим Gridview в моем Machine.aspx
<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>
Мой код в моем коде за файлом в моем Machine.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
lblError.Text = "hello there";
SqlDataSource1.Selected += new SqlDataSourceStatusEventHandler(SqlDataSource1_Selected);
}
protected void SqlDataSource1_Selected(object sender, SqlDataSourceStatusEventArgs e)
{
if (e.ExceptionHandled)
{
lblError.Text = "There is a problem";
}
}
И все же для некоторых готовых, когда я помещаю BreakPoint в свое выбранное событие, он даже не доходит до него.
Почему?
SqlDataSource имеет событие Selected
. Добавьте обработчик к этому событию, например, и обработайте любые ошибки (покажите информационное сообщение и т.д.) В этом обработчике.
void GridView1_Selected(object sender, SqlDataSourceStatusEventArgs e)
{
if (e.ExceptionHandled)
{
//Show error message
}
}
Извините, но вам придется иметь код в коде!
Edit
Посмотрев на свой код, я не думаю, что вы когда-либо связывали свой GridView, поэтому ваш SqlDataSource никогда не пытается выбрать данные из вашей базы данных.
В вашем методе Page_Load добавьте следующий код:
if (!IsPostBack)
{
GridView1.DataBind();
}
Дальнейшее редактирование
Попробуйте изменить "onselected" на "OnSelected" на вашем SqlDataSource и удалите строку, чтобы привязать обработчик событий в коде.
Я в тупике, если это не сработает, поскольку в принципе вы получили самый простой пример.
Еще дальше отредактируйте
Попробуйте это вместо
void SqlDataSource1_Selected(object sender, SqlDataSourceStatusEventArgs e)
{
if (e.Exception != null)
{
//Show error message
lblError.Text = "There is a problem";
//Set the exception handled property so it doesn't bubble-up
e.ExceptionHandled = true;
}
}
вам нужно обработать ошибку из кода позади вашего Gridview_ItemInserting или gridview_itemupdating, чтобы выполнить пожар, прежде чем ваш код будет отправлен в элемент управления sql.
protected void GridView1_ItemInserting(object sender,DetailsViewInsertEventArgs e)
{
if (e.Exception != null)
{
Lblerror.text="error message"
}
}
сделайте это также для обновления
void SqlDataSource1_Selected(object sender, SqlDataSourceStatusEventArgs e)
{
if (e.Exception = null)
{
//bind data to gridview
GridView1.DataBind();
}
else
{
//Show error message
lblError.Text = "There is a problem";
//Set the exception handled property so it doesn't bubble-up
e.ExceptionHandled = true;
}
}
Создайте обработчик событий для выбранного события SqlDataSource, протестируйте, если возникло исключение, выполните любые сообщения об ошибках, а затем укажите, что вы теперь обработали ошибку.
mSqlDataSource.Selected += new sqlDataSourceStatusEventHandler(mSqlDataSource_Selected);
void mSqlDataSource_Selected(object sender, SqlDataSourceStatusEventArgs e)
{
if (e.Exception != null)
{
mErrorText.Text = e.Exception.Message;
mErrorText.Visible = true;
e.ExceptionHandled = true;
}
}
Я считаю, что вы хотите обработать выбранное событие SQLDataSource и проверить аргумент события для исключения.