GridViewColumn только для чтения при редактировании - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть сетка с некоторыми данными, и для каждой строки есть возможность редактировать данные, поэтому они видят EditTemplateField вместо templateField.Теперь пользователи с определенной позицией не должны иметь возможность редактировать столбец TaskName.

Сначала я попробовал это так:

protected void gvSubtasks_RowEditing(object sender, GridViewEditEventArgs e)
        {
            GridView gv = sender as GridView;
            gvSubtasks.Columns[0].ReadOnly= true;
            gv.EditIndex = e.NewEditIndex;
            BindGridView();
        }

Но он не находит свойство ReadOnly.

Впоследствии я попробовал это так:

   protected void gvSubtasks_RowEditing(object sender, GridViewEditEventArgs e)
    {
        GridView gv = sender as GridView;
        gv.EditIndex = e.NewEditIndex;
        BindGridView();
        foreach (GridViewRow row in gvSubtasks.Rows)
        {
            TextBox txtTaskName = row.Cells[0].FindControl("txtTaskName") as TextBox;

            if (IsRightUserPosition()){
                txtTaskName.Enabled = true;
            }
            else
            {
                txtTaskName.Enabled = false;
            }
        }
    }

Но текстовое поле не находит.

1 Ответ

0 голосов
/ 13 декабря 2018

Необходимо установить для свойства Readonly значение true:

((BoundField)gridView1.Columns[columnIndex]).ReadOnly = true;

Вы можете попробовать сделать это в событии RowDataBound gridView1

Попробуйте использовать метку в шаблоне редактирования.

C #:

protected bool ShowButton(object DataItem)
{
    //Here you can place as many conditions as you like 
    //Provided you always return either true or false
    if (Put Access condition here)
        return true;
    else
        return false;
}

HTML-код:

	<Columns>
			<asp:TemplateField>
				<ItemTemplate>
						<asp:Label ID="lbldate" runat="server" Visible='<%# ShowButton(Eval("Process")) %>'></asp:Label>
				</ItemTemplate>
				<EditItemTemplate>
						<asp:Label ID="lbldate" Visible='<%# ShowButton(Eval("Process")) %>' runat="server" ></asp:Label>
						<asp:TextBox ID="lbldate" Visible='<%# ShowButton(Eval("Process")) %>' runat="server" ></asp:Label>
				</EditItemTemplate>
			</asp:TemplateField>    
	</Columns> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...