Програмно переключиться в режим редактирования
От: Kvazimodo75  
Дата: 15.05.08 06:39
Оценка:
Задача: по специальному полю в данных программно переключать одну из строчек в (DataGrid || DataList || GridView) в режим редактирования.

Попытка решения:


private string _GradeType = String.Empty;
 int current_row_i = 0;
    int edit_row = -1;

    int current_row_i1 = 0;
    int edit_row1 = -1;

    int current_row_i2 = 0;
    int edit_row2 = -1;

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        string _gradetype;

        current_row_i++;
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            _gradetype = ((DataRowView)e.Row.DataItem)["GT"].ToString();
            if (_gradetype == _GradeType)
            {
                edit_row = current_row_i;
            }
        }
    }
    protected void GridView1_PreRender(object sender, EventArgs e)
    {
        GridView1.EditIndex = edit_row;
    }
    protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
    {
        string _gradetype;

        current_row_i1++;
        if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
        {
            _gradetype = ((DataRowView)e.Item.DataItem)["GT"].ToString();
            if (_gradetype == _GradeType)
            {
                edit_row1 = current_row_i1;
                DataList1.EditItemIndex = current_row_i1;
            }
        }
    }
    protected void DataList1_PreRender(object sender, EventArgs e)
    {
        DataList1.EditItemIndex = edit_row1;
    }
    protected void DataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e)
    {
        string _gradetype;

        current_row_i2++;
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            _gradetype = ((DataRowView)e.Item.DataItem)["GT"].ToString();
            if (_gradetype == _GradeType)
            {
                edit_row2 = current_row_i2;
                DataGrid1.EditItemIndex = current_row_i2;
            }
        }
    }
    protected void DataGrid1_PreRender(object sender, EventArgs e)
    {
        DataGrid1.EditItemIndex = edit_row2;
    }


===============

<asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" ShowHeader="False" AutoGenerateColumns="false" OnRowDataBound="GridView1_RowDataBound" OnPreRender="GridView1_PreRender">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <%#Eval("GradeType") %>
            </ItemTemplate>
            <EditItemTemplate>
                afdsasdfsd
            </EditItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField>
            <ItemTemplate>
                <%#Eval("GradeValue") %>
            </ItemTemplate>
            <EditItemTemplate>
                 <uc2:DropDownGradeValues ID="DropDownGradeValues1" runat="server" />
            </EditItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
<asp:DataList ID="DataList1" runat="server" DataSourceID="SqlDataSource1" OnItemDataBound="DataList1_ItemDataBound" OnPreRender="DataList1_PreRender">
            <ItemTemplate>
                <%#Eval("GradeType") %>
                <%#Eval("GradeValue") %>
            </ItemTemplate>
            <EditItemTemplate>
                 <uc2:DropDownGradeValues ID="DropDownGradeValues1" runat="server" />
                 12321312321321321321321321
            </EditItemTemplate>
</asp:DataList>
<asp:DataGrid ID="DataGrid1" runat="server" DataSourceID="SqlDataSource1" ShowHeader="False" OnItemDataBound="DataGrid1_ItemDataBound" OnPreRender="DataGrid1_PreRender">
    <Columns>
        <asp:TemplateColumn>
            <ItemTemplate>
                <%#Eval("GradeType") %>
            </ItemTemplate>
            <EditItemTemplate>
                adfsfdsfsfsdfds
            </EditItemTemplate>
        </asp:TemplateColumn>
        <asp:TemplateColumn>
            <ItemTemplate>
                <%#Eval("GradeValue") %>
            </ItemTemplate>
            <EditItemTemplate>
                 <uc2:DropDownGradeValues ID="DropDownGradeValues1" runat="server" />
            </EditItemTemplate>
        </asp:TemplateColumn>
    </Columns>
</asp:DataGrid>

Условие (_gradetype == _GradeType) срабатывает (проверял отладчиком).
Шаблон редактирования не отображается ни в одном из контролов.

Как быть?
Re: Програмно переключиться в режим редактирования
От: Koxa  
Дата: 20.05.08 11:43
Оценка:
Здравствуйте, Kvazimodo75, Вы писали:

K>Задача: по специальному полю в данных программно переключать одну из строчек в (DataGrid || DataList || GridView) в режим редактирования.


Может в PreRender вызвать DataBind еще раз?...
Re[2]: Програмно переключиться в режим редактирования
От: Kvazimodo75  
Дата: 21.05.08 13:59
Оценка:
Здравствуйте, Koxa, Вы писали:

K>Может в PreRender вызвать DataBind еще раз?...


А не будет зацикливания?


Пока такое решение — сначала бинд одного из контролов (с Visible = false)
там вычисляется номер строки, которую надо переводить в режим редактирования.
потом у другого контрола устанавливается EditIndex (или аналогичное свойство) и, только затем, Bind()
Re: Програмно переключиться в режим редактирования
От: C...R...a...S...H  
Дата: 21.05.08 19:32
Оценка:
Здравствуйте, Kvazimodo75, Вы писали:

K>Задача: по специальному полю в данных программно переключать одну из строчек в (DataGrid || DataList || GridView) в режим редактирования.

K>Как быть?
После изменения GridView1.EditIndex
необходимо вызывать DataBind
Там было написано русским по белому...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.