0

私のaspxページには、1つのイメージボタンを備えた5つのテキストボックスを持つリピーターがあり、これらのテキストボックスは読み取り専用である行を編集します。編集するには、読み取り専用ではない必要があります..

私の背後にあるコードでは、次を使用しています:

protected void EditRecipeInfo(object sender, CommandEventArgs e)
{
    ImageButton ib = sender as ImageButton;

    TextBox titleTXT = (TextBox)ib.FindControl("titleRepeat");
    TextBox qtyTXT = (TextBox)ib.FindControl("qtyRepeat");
    TextBox uomTXT = (TextBox)ib.FindControl("uomRepeat");
    TextBox prepTXT = (TextBox)ib.FindControl("prepRepeat");
    TextBox orTXT = (TextBox)ib.FindControl("orRepeat");

    titleTXT.ReadOnly = false;
    qtyTXT.ReadOnly = false;
    uomTXT.ReadOnly = false;
    prepTXT.ReadOnly = false;
    orTXT.ReadOnly = false;
    ////
}

しかし、このイベントを発生させると、ブレーク ポイントはプロパティが false に設定されていることを示しますが、クリックしてテキスト ボックス内の値を削除すると、読み取り専用のように動作します。

アップデート:

  <asp:Repeater ID="ingredRepeater" runat="server">
                <HeaderTemplate>
                    <table style="width: 100%">
                        <tr>
                            <th></th>
                            <th></th>
                            <th><h2>Title</h2></th>
                            <th><h2>Qty.</h2></th>
                            <th><h2>UoM</h2></th>
                            <th><h2>Prep.</h2></th>
                            <th><h2>Alternate</h2></th>
                        </tr>
                </HeaderTemplate>
                <ItemTemplate>
                    <tr>
                        <td>
                            <asp:ImageButton Style="height: 25px; width: 25px;" ImageUrl="/img/edit.png" Visible="true"
                                ID="editRecipeInfo" AutoPostBack="true" runat="server" OnCommand="EditRecipeInfo" CommandName='<%# DataBinder.Eval(Container, "DataItem.DetailID") %>' />
                        </td>
                        <td>
                            <asp:ImageButton ImageUrl="/img/RedX.png" ID="button2" runat="server" Height="20"
                                Width="20" CommandName='<%# DataBinder.Eval(Container, "DataItem.DetailID") %>'
                                OnCommand="deleteRecipeView" />
                        </td>
                        <td>
                            <asp:TextBox AutoPostBack="true" ReadOnly="true" ID="titleRepeat" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Name") %>'
                                size="45" />
                        </td>
                        <td>
                            <asp:TextBox  AutoPostBack="true" ReadOnly='true' ID="qtyRepeat" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Quantity") %>'
                                size="10" />
                        </td>
                        <td>
                            <asp:TextBox AutoPostBack="true"  ReadOnly='true' ID="uomRepeat" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.UnitsOfMeasure") %>'
                                size="10" />
                        </td>
                        <td>
                            <asp:TextBox AutoPostBack="true"  ReadOnly='true' ID="prepRepeat" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Prep") %>'
                                size="10" />
                        </td>
                        <td>
                            <asp:TextBox AutoPostBack="true"  ReadOnly='true' ID="orRepeat" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.AlternativeIngredients") %>'
                                size="20" />
                        </td>
                    </tr>
                </ItemTemplate>
                <FooterTemplate>
                    </table>
                </FooterTemplate>
            </asp:Repeater>
4

2 に答える 2

2

ReadOnly プロパティを true に設定した後、リピーターを再バインドしていないことを確認してください。

于 2012-11-06T14:25:00.020 に答える
1

@Tariqulazam に同意します。マークアップが役立ちます。

あなたのコードが ItemCommand イベント ハンドラーから来ていると仮定すると、FindControl が ImageButton に適用されていることに非常に驚きました。

あなたのコードは次のようになるはずです:

void rpAcces_ItemCommand(object source, RepeaterCommandEventArgs e)
  {
  //...
  ImageButton ib = sender as ImageButton;

  TextBox titleTXT = (TextBox)e.Item.FindControl("titleRepeat");
  TextBox qtyTXT = (TextBox)e.Item.FindControl("qtyRepeat");
  TextBox uomTXT = (TextBox)e.Item.FindControl("uomRepeat");
  TextBox prepTXT = (TextBox)e.Item.FindControl("prepRepeat");
  TextBox orTXT = (TextBox)e.Item.FindControl("orRepeat");

  titleTXT.ReadOnly = false;
  qtyTXT.ReadOnly = false;
  uomTXT.ReadOnly = false;
  prepTXT.ReadOnly = false;
  orTXT.ReadOnly = false;
  //...
 }

また、これらの変更を失うことなく、ページのライフサイクルの後半でリピーターを再バインドすることはできないことに注意してください。TextBoxes に設定されたEnabled属性に注意してください

繰り返しになりますが、コード全体がないと答えるのは困難です。

于 2012-11-06T09:39:51.167 に答える