2014-09-25 2 views
0

У меня есть GridView, где в текстовом поле должно быть доступны для редактирования в некоторых случаях только .. я пробовал следующий код, но он не работает, как решить эту проблему и сделать текстовое поле для редактирования ..Как сделать текстовое поле readonly в gridview?

protected void GridView1_OnRowEditing(object sender, GridViewEditEventArgs e) 
    { 
     .... 
     if (some condition) 
      { 
      .................. 
      } 
     else(some condition) 
      { 
      ............. 
      } 
     else if(some other) 
      { 
      TextBox itm = (GVEditRate.Rows[e.NewEditIndex].FindControl("TextBox1") as TextBox); 
       itm.Enabled = true; 
      TextBox prfc = (GVEditRate.Rows[e.NewEditIndex].FindControl("TextBox2") as TextBox); 
       prfc.Enabled = false; 
      TextBox anest = (GVEditRate.Rows[e.NewEditIndex].FindControl("TextBox3") as TextBox); 
       anest.Enabled = false; 
      } 
+0

You следует использовать [Событие RowDataBound] (http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowdatabound (v = vs.110) .aspx) для ваши изменения. –

ответ

1

вы пробовали Это:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowState == DataControlRowState.Edit || e.Row.RowState == DataControlRowState.Alternate) 
     { 
     //on you condition 
     TextBox txt = (TextBox)e.Row.FindControl("ControlID"); 
     if(txt !=null) 
     { 
      txt.Attributes.Add("readonly", "readonly");   
     // txt.Attributes.Remove("readonly"); To remove readonly attribute 
     } 
     } 
    } 
0

Как в комментарии вы можете сделать следующий код на RowDataBound Event

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowState == DataControlRowState.Edit || e.Row.RowState == DataControlRowState.Alternate) 
    { 
     //on you condition 
     TextBox txt = (TextBox)e.Row.FindControl("ControlID"); 
     txt.ReadOnly = true; 
    } 
} 
+0

, но я привязываю gridview через codebehind к событию изменения текстового поля, поэтому, если я напишу это в rowdatabound, я получаю все значения как null – user3781993

+0

Вы должны изменить его, где вы привязываете griview. –

+0

что-то меняется? это в функции привязки данных? – user3781993

0

Я предпочитаю использовать данные связывающихся Expres сии в странице в столбце сетки

<asp:TextBox runat="server" Enabled='<%# YourMethodThatReturnCondition(Eval("Field1"), Eval("Field2"), ...)%>' ></asp:TextBox>

Wehre YourMethodThatReturnCondition это метод, который возвращает булев

0
<asp:GridView ID="grdTaskDataCat1" OnRowCommand="grdTaskDataCat1_RowCommand" OnSorting="grdTaskDataCat1_Sorting" AutoGenerateColumns="false" ShowHeaderWhenEmpty="true" AllowSorting="true" Width="100%" DataKeyNames="ID" runat="server" OnRowDataBound="grdTaskDataCat1_RowDataBound"> 
    <Columns>               <asp:TemplateField HeaderText="Sr No" Visible="false">              <ItemTemplate>                <asp:TextBox ID="txtId" Visible="false" ReadOnly Style="width: 30%" Text='<%# Bind("ID")%>' runat="server"></asp:TextBox>             </ItemTemplate>               </asp:TemplateField> 

    </Columns> 
    </asp:GridView> 

По данным ROW границы GridView

protected void grdTaskDataCat1_RowDataBound(object sender, GridViewRowEventArgs e) 
     { 
      if (e.Row.RowType == DataControlRowType.DataRow) 
      { 
TextBox txt = (TextBox)e.Row.FindControl("txtTaskName"); 

       if (txt.Text != "") 
       { 
        txt.Attributes.Add("readonly", "readonly"); 

       } 
} 
}