0

我有一个带有文本框和单选按钮列表和编辑按钮的表单视图,顺序如下

 <asp:textbox id="tb1" runat="server" text='<%# Bind("DATE_1", "{0:d}") %>' />
 <asp:calendarextender id="tb1_CalendarExtender" runat="server" targetcontrolid="tb1" />

 <asp:textbox id="tb2" runat="server" text='<%# Bind("DATE_2", "{0:d}") %>' />
 <asp:calendarextender id="tb2_CalendarExtender" runat="server" targetcontrolid="tb2" />

 <asp:button id="EditButton" runat="server" causesvalidation="False" commandname="Edit" text="Edit" enabled='<%# CanEdit(Eval("DATE_1"), Eval("DATE_2")) %>' OnClick="EditButton_Click" />

 <asp:radiobuttonlist id="rbl1" runat="server" repeatdirection="Horizontal" text='<%# Bind("DIAG_LL_APPROVAL") %>'>
      <asp:ListItem>Approved</asp:ListItem>
      <asp:ListItem>Rejected</asp:ListItem>
      <asp:ListItem Selected="True">None</asp:ListItem>
 </asp:radiobuttonlist>
 <asp:textbox id="tb3" runat="server" text='<%# Bind("COMMENTS") %>' maxlength="1000"/>                                 

当编辑按钮为 时,需要隐藏或禁用以及rbl1是否tb3有任何值(即) 。tb1tb2nullclicked

protected void EditButton_Click(object sender, EventArgs e)
    {
        TextBox t1 = FormViewName.FindControl("tb1") as TextBox;
        TextBox t2 = FormViewName.FindControl("tb2") as TextBox;
        RadioButtonList rbl = FormViewName.FindControl("rbl1") as RadioButtonList;
        TextBox t3 = FormViewName.FindControl("tb3") as TextBox;

        //if ("".Equals(tdcd) || "".Equals(tdrcd))
        if (!string.IsNullOrEmpty(t1.Text) && !string.IsNullOrEmpty(t2.Text))
        {
            FormViewName.FindControl("rbl1").Visible = true;
            FormViewName.FindControl("tb3").Visible = true;
        }
        else
        {
            FormViewName.FindControl("rbl1").Visible = false;
            FormViewName.FindControl("tb3").Visible = false;
        }
    }                                                                             

错误:对象引用未设置为对象的实例

4

3 回答 3

0

试试这个:在编辑按钮点击事件:

if (string.IsNullOrEmpty(tb1.Text) && string.IsNullOrEmpty(tb2.Text))
        {
            rbl1.Visible = false;
            tb3.Visible = false;
        }

编辑

TextBox txt = (TextBox)FormView1.FindControl("tb1");

TextBox txt1 = (TextBox)FormView1.FindControl("tb2");

TextBox tb3= (TextBox)FormView1.FindControl("tb3");

 RadioButtonList rb1= (RadioButtonList)FormView1.FindControl("rbl1");


    if (string.IsNullOrEmpty(txt.Text) && string.IsNullOrEmpty(txt1.Text))
            {
                rb1.Visible = false;
                tb3.Visible = false;
            }
          else

              {
                rb1.Visible = true;
                tb3.Visible = true;
}
于 2012-07-06T07:49:24.593 回答
-1

我会做这样的事情:

 <asp:textbox id="tb1" runat="server" text='<%# Bind("DATE_2", "{0:d}") %>' />
 <asp:calendarextender id="tb1_CalendarExtender" runat="server" targetcontrolid="tb1" />

 <asp:textbox id="tb2" runat="server" text='<%# Bind("DATE_2", "{0:d}") %>' />
 <asp:calendarextender id="tb2_CalendarExtender" runat="server" targetcontrolid="tb2" />

 <asp:button id="EditButton" runat="server" causesvalidation="False" commandname="Edit" text="Edit" enabled='<%# CanEdit(Eval("DATE_2"), Eval("DATE_2")) %>'
             onclientclick="verifyEditControls();" />

 <div class="hide edit-controls">
     <asp:radiobuttonlist id="rbl1" runat="server" repeatdirection="Horizontal" text='<%# Bind("DIAG_LL_APPROVAL") %>'>
        <asp:ListItem>Approved</asp:ListItem>
        <asp:ListItem>Rejected</asp:ListItem>
        <asp:ListItemSelected="True">None</asp:ListItem>
    </asp:radiobuttonlist>
    <asp:textbox id="tb3" runat="server" text='<%# Bind("COMMENTS") %>' maxlength="1000"/>
 </div>

并添加一个javascript(为了简单起见,我在这里使用jQuery)

<script>
    function verifyEditControls() {
        var c1 = '#<%= tb1.ClientID %>',
            c2 = '#<%= tb2.ClientID %>';

        if($(c1).val().length > 0 || $(c2).val().length > 0)
            $(".edit-controls").show();
        else 
            $(".edit-controls").hide();

        return $(".edit-controls").is("visible");
    }
</script>

如果控件不可见,这将禁用回发,并且仅显示控件 Wrapped <div>,但如果按下编辑按钮并且控件可见,true则发送 a 并且您的页面将回发到按钮上调用的方法。

只需为此添加一个CommandClick服务器事件。

如果您想使用普通按钮,则无需要求 .NET Framework 为您创建一个,只需使用<button id="EditButton">Edit</button>

于 2012-07-06T07:49:44.343 回答
-1

单击按钮时,您可以检查 tb1 和 tb2 是否不是字符串。如果是,则将 rbl1 和 tb3 的可见性属性设置为 false。

或者您可以使用 tb1 和 tb2 的 OnTextChanged 事件,当没有在 rbl1 中键入文本并且 tb3 被隐藏时,当有人添加文本时,它们将自动设置为可见

顺便说一句:您需要使用更好的命名约定

<asp:textbox id="tb1" runat="server" text='<%# Bind("DATE_2", "{0:d}") %>' />
 <asp:calendarextender id="tb1_CalendarExtender" runat="server" targetcontrolid="tb1" />

 <asp:textbox id="tb2" runat="server" text='<%# Bind("DATE_2", "{0:d}") %>' />
 <asp:calendarextender id="tb2_CalendarExtender" runat="server" targetcontrolid="tb2" />

 <asp:button id="EditButton" runat="server" causesvalidation="False" 
        commandname="Edit" text="Edit" 
        enabled='<%# CanEdit(Eval("DATE_2"), Eval("DATE_2")) %>' 
        onclick="EditButton_Click" />

 <asp:radiobuttonlist id="rbl1" runat="server" Visible="false" repeatdirection="Horizontal" text='<%# Bind("DIAG_LL_APPROVAL") %>'>
      <asp:ListItem>Approved</asp:ListItem>
      <asp:ListItem>Rejected</asp:ListItem>
      <asp:ListItem Selected="True">None</asp:ListItem>
 </asp:radiobuttonlist>
 <asp:textbox id="tb3" runat="server" Visible="false" text='<%# Bind("COMMENTS") %>' maxlength="1000"/> 

在后面的代码中

protected void EditButton_Click(object sender, EventArgs e)
{
    if (!string.IsNullOrEmpty(tb1.Text) && !string.IsNullOrEmpty(tb2.Text))
    {
        rbl1.Visible = true;
        tb3.Visible = true;

        // do your stuff
    }
    else 
    {
        rbl1.Visible = false;
        tb3.Visible = false;
    }
}
于 2012-07-06T07:43:56.483 回答