Я превращаю некоторые бумажные формы в веб-формы, и одним из моих требований является наличие группы флажков «Да / Нет», которые также могут отслеживать, если выбор не был сделан.Поэтому я не могу просто использовать один CheckBox, связанный с битовым полем в Sql Server, потому что он не отслеживает, игнорировал ли пользователь поле или нет.
Чтобы решить мою проблему, я обернул два флажка вКонтроль ASCX.Затем я создал публичное свойство Checked в своем элементе управления ASCX.Из этого свойства я возвратил «True», если установлен флажок «true», «False» - флажок «false» и пустая строка, если флажок не установлен.
Когда я помещаю этот элемент управления в GridView ипривязать его к битовому полю с помощью GridView SqlDataSource все работает отлично.Когда я связываю тот же элемент управления в FormView, хотя обновление FormView устанавливает для нетронутых элементов управления значение False.Я прошел через мою логику управления, и она правильно передает пустую строку, поэтому кажется, что FormView переопределяет значение перед отправкой его в хранимую процедуру.
Есть ли способ заставить эту работу работать в FormViewили мне придется рефакторинг, чтобы использовать что-то вроде поля int для отслеживания трех опций: 0 = нет выбора, 1 = true, 2 = false или что-то в этом роде?Я предоставил код для моего элемента управления ASCX ниже для справки.
public partial class controls_yesNoCheck : System.Web.UI.UserControl
{
public string Checked
{
get
{
if (ckbNo.Checked)
return "false";
if (ckbYes.Checked)
return "true";
else
return "";
}
set
{
if (value == "")
{
ckbNo.Checked = false;
ckbYes.Checked = false;
}
else if (value == "True" || value == "true")
{
ckbYes.Checked = true;
ckbNo.Checked = false;
}
else
{
ckbNo.Checked = true;
ckbYes.Checked = false;
}
}
}
protected void Page_Load(object sender, EventArgs e)
{
}
protected void noChecked(object sender, EventArgs e)
{
ckbYes.Checked = false;
}
protected void yesChecked(object sender, EventArgs e)
{
ckbNo.Checked = false;
}
}
Редактировать: внешний вид элемента управления выглядит так, я оставил методы CheckChanged вне предыдущего блока кода, так как их функциональность нене влияет на эту проблему.
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="yesNoCheck.ascx.cs" Inherits="controls_yesNoCheck" %>
<asp:CheckBox ID="ckbYes" runat="server" Text="Yes" AutoPostBack="true" OnCheckedChanged="yesChecked" />
<asp:CheckBox ID="ckbNo" runat="server" Text="No" AutoPostBack="true" OnCheckedChanged="noChecked" />