Добавьте строку Gridview ПОСЛЕ заголовка

Я не уверен, что ваша идея хорошая. Я опубликовал несколько небольших решений, но вы должны прочитать эту статью для лучшей практики.

1) Если вы хотите запустить внешний скрипт из колбы, вы можете использовать подпроцесс для запуска скрипта из командной строки.

@app.route('/run-script')
def run_script():
   result = subprocess.check_output("python main.py", shell=True)
   return render_template('results.html', **locals())

2) Если вы хотите запускать код Python в фоновом режиме без возврата, вы можете создать поток.

from threading import Thread

@app.route('/run-in-background')
def run_in_background():
    run_func()
    return redirect(url_for('.index'))

def run_func():
    data = { 'some': 'data', 'any': 'data' }
    thr = Thread(target=run_async_func, args=[app, data])
    thr.start()
    return thr

def run_async_func(app, data):
    with app.app_context():
    # Your working code here!
    example_module.do_somthing_with(data)

Не уверен, поможет ли это. Оба решения могут привести к путанице.

Вы должны прочитать документы по фляге. Функция app.config.from_pyfile оценивает данные конфигурации из кода Python. Это сильно отличается от вашего вопроса.

5
задан Ropstah 26 March 2009 в 13:11
поделиться

3 ответа

Так как это - пользовательский GridView, почему Вы не рассматриваете переопределение метода CreateChildControls?

Т.е. (извините, C#):

protected override void CreateChildControls()
{
    base.CreateChildControls();

    if (HeaderRow != null)
    {
        GridViewRow header = CreateRow(-1, -1, DataControlRowType.Header, DataControlRowState.Normal);
        for (int i = 0; i < Columns.Count; i++)
        {
            TableCell cell = new TableCell();
            cell.Text = Columns[i].AccessibleHeaderText;
            cell.ForeColor = System.Drawing.Color.Black;
            cell.BackColor = System.Drawing.Color.Cornsilk;
            header.Cells.Add(cell);
        }

        Table table = (Table)Controls[0];
        table.Rows.AddAt(1, header);
    }
}

ОБНОВЛЕНИЕ, Как был упомянут Ropstah, sniplet выше, не работает с разбиением на страницы на. Я переместил код в PrepareControlHierarchy, и теперь он работает корректно с разбиением на страницы, выбором и сортировкой.

protected override void PrepareControlHierarchy()
{
    if (ShowHeader && HeaderRow != null)
    {
        GridViewRow header = CreateRow(-1, -1, DataControlRowType.Header, DataControlRowState.Normal);
        for (int i = 0; i < Columns.Count; i++)
        {
            TableCell cell = new TableCell();
            cell.Text = Columns[i].AccessibleHeaderText;
            cell.ForeColor = System.Drawing.Color.Black;
            cell.BackColor = System.Drawing.Color.Cornsilk;
            header.Cells.Add(cell);
        }

        Table table = (Table)Controls[0];
        table.Rows.AddAt(1, header);
    }

    //it seems that this call works at the beginning just as well
    //but I prefer it here, since base does some style manipulation on existing columns
    base.PrepareControlHierarchy();
}
4
ответ дан 14 December 2019 в 09:01
поделиться

Попробуйте это, когда Вы добавите строку к InnerTable:

t.Controls.AddAt(1, r)

Вот быстрый базовый тест, который я сделал, который, кажется, работает хорошо:

Protected Sub gridview_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles gridview.DataBound
    Dim g As GridView = CType(sender, GridView)

    Dim r As New GridViewRow(0, -1, DataControlRowType.Header, DataControlRowState.Normal)
    Dim th As New TableHeaderCell()
    th.ColumnSpan = g.Columns.Count
    th.Text = "This is my new header"
    r.Cells.Add(th)

    Dim t As Table = CType(g.Controls(0), Table)
    t.Rows.AddAt(1, r)
End Sub
0
ответ дан 14 December 2019 в 09:01
поделиться

Хорошие рабочие, ребята, я использовал вашу технику для группировки своего gridview с поддержкой AJAX и долго искал. Ваше здоровье.

protected override void PrepareControlHierarchy()
{
    if (GroupColumns)
    {
        #region Group Column

        Table table = (Table)Controls[0];

        string lastValue = string.Empty;
        foreach (GridViewRow gvr in this.Rows)
        {
            string currentValue = gvr.Cells[GroupColumnIndex].Text;

            if (lastValue.CompareTo(currentValue) != 0)
            {
                // there's been a change in value in the sorted column
                int rowIndex = table.Rows.GetRowIndex(gvr);

                // Add a new sort header row
                GridViewRow sortRow = new GridViewRow(rowIndex, rowIndex, DataControlRowType.DataRow, DataControlRowState.Normal);

                TableCell sortCell = new TableCell();
                TableCell blankCell = new TableCell();

                sortCell.ColumnSpan = this.Columns.Count - 1;
                sortCell.Text = string.Format("{0}", currentValue);

                blankCell.CssClass = "group_header_row";
                sortCell.CssClass = "group_header_row";

                // Add sortCell to sortRow, and sortRow to gridTable
                sortRow.Cells.Add(blankCell);
                sortRow.Cells.Add(sortCell);
                table.Controls.AddAt(rowIndex, sortRow);

                // Update lastValue
                lastValue = currentValue;
            }
        }

        #endregion
    }

    HideColumns();

    base.PrepareControlHierarchy();
} 
3
ответ дан 14 December 2019 в 09:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: