gpt4 book ai didi

c# - 自定义控件的绑定(bind)在 GridView 中有效,但在 FormView 中无效

转载 作者:太空宇宙 更新时间:2023-11-03 11:25:14 24 4
gpt4 key购买 nike

我正在将一些纸质表单转换为网络表单,我的一个要求是拥有一组是/否复选框,如果没有进行任何选择,它们也可以进行跟踪。所以我不能只使用绑定(bind)到 Sql Server 中某个位字段的单个 CheckBox,因为它不会跟踪用户是否忽略了该字段。

为了解决我的问题,我将两个复选框包装到一个 ASCX 控件中。然后我在我的 ASCX 控件中创建了一个公共(public) Checked 属性。如果选中了 true 复选框,我会从该属性返回“True”,如果选中了 false 复选框,则返回“False”,如果两个复选框都未选中,则返回空字符串。

当我将此控件放入 GridView 并使用 GridView SqlDataSource 将其绑定(bind)到位字段时,一切正常。当我在 FormView 中绑定(bind)相同的控件时,尽管 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" />

最佳答案

您是否考虑过使用 nullable types

然后你可以有更简单的代码,它会更好地匹配数据库,因为 SQL Server 有一个可以为空的位类型。这样的事情应该有效:

public bool? Checked {get; private set;}
public void setChecked(String value)
{
if (value == "")
_checked = null;
else if (value.ToLower() == "true")
_checked = true;
else
_checked = false;
}

根据您所说的未发生错误的位置和您上面的代码,我敢打赌您从字符串到 int 的转换存在一些问题以插入到数据库中。同样,切换到上述代码应该可以解决该问题。

关于c# - 自定义控件的绑定(bind)在 GridView 中有效,但在 FormView 中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9592130/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com