Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Нумерация dataGridView1


Автор: Banderos 2.6.2011, 17:00
Здравствуйте!!!

Дело вот в чем: есть форма, на ней различные элементы и по мимо всех других есть panel2
Изначально она невидимая, а потом по нажатию на кнопку она становится видимой и на ней есть dataGridView1 я его заполняю данными и затем нумерую строки dataGridView1 таким образом:

Код

                for (int S = 0; S < listData_DG.RowCount - 1; S++)
                {
                    listData_DG.Rows[S].HeaderCell.Value = Convert.ToString(S + 1);
                }


Когда ПЕРВЫЙ раз нажимаю на кнопку, то panel2 с dataGridView1 отображается с заполнеными данными, но строки не пронумерованы, а вот если скрыть панель и потом нажать опять кнопку, заполнив dataGridView1 другими или этими же данными, то о чудо отображается panel2 и в dataGridView1 строки уже пронумерованы))))

Как быть? В чем дело?

Заранее спасибо!!!

Автор: Gluttton 2.6.2011, 21:13
Banderos, DataBind?

Автор: Banderos 2.6.2011, 21:41
Gluttton, всмысле DataBind???

типо источник данных что ли:
Код

listData_DG.DataSource = tempTable;


так я источник задаю перед тем, как пытаюсь пронумеровать строки listData_DG

Автор: Gluttton 2.6.2011, 22:12
Цитата(Banderos @  2.6.2011,  21:41 Найти цитируемый пост)
так я источник задаю перед тем, как пытаюсь пронумеровать строки listData_DG 

Я могу ошибаться, но ситуация примерно следующая.
Строки нумеруются на сервере, а отображается dataGrivView на клиенте и конечно же ничего не значет, о том, что же там произвошло на сервере.
Так вот нужно каким то образом связать данные сервера с данными на клиенте.

В общем как то так.

Но я могу и ошибаться smile .

Автор: Banderos 3.6.2011, 06:19
Gluttton, так самое интересное в том, что если скрыть панель и затем кликнуть на кнопку, и панель сделать опять видимой, то строки уже пронумерованы, вот в чем дело. 

Gluttton, ваш вариант можно было бы рассмотреть, если бы стоки совсем не нумеровались, а так, только в первый раз не срабатывает, а во все следующие разы - работает. 

Автор: Gluttton 3.6.2011, 06:57
Banderos, ну нет, так нет.

Я собственно говоря, к чему этот разговор про DataBind завел.
У меня есть страница, на которой среди всего прочего, есть DropDownList и DataSource:
Код

                    <asp:DropDownList 
                        id="dropDownListBreakageProductID" 
                        runat="server"
                        DataSourceID="dataSourceProduct"
                        DataTextField="product"
                        DataValueField="id" />


                    <asp:SqlDataSource 
                        id="dataSourceProduct" 
                        runat="server">
                    </asp:SqlDataSource>

И для того, что бы у меня все работало как положено, я в Page_Load страницы, кроме всего остального, выполняю следующий код:
Код

                    dataSourceProduct.ProviderName = "FirebirdSql.Data.FirebirdClient";
                    dataSourceProduct.ConnectionString = dataAccessLayer.GetConnectionString ();
                    dataSourceProduct.SelectCommand = 
                                                      "select " +
                                                          "id, " +
                                                          "product_type || ' №' || number as product " +
                                                   "from product;";
        
                    dataSourceProduct.DataBind ();

dataAccessLayer - это объект пользователського типа данных инкапсулирующий работу с БД и в данном примере не важен.

Вот я и подумал, что может быть и вашем случае, нечто похожее.

Автор: Banderos 3.6.2011, 07:47
Gluttton, спасибо, попробую и тут сделать что то подобное.

Но все же интересно, что ни у кого не было такого глюка???

Автор: Gluttton 4.6.2011, 08:48
Banderos, не знаю, на сколько это точный пример, но тем не менее:
Код

<%@ Page Language="C#" Inherits="DataGrid.Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head runat="server">
    <title>Default</title>
</head>
<body>
    <form id="form" runat="server">
        <asp:Panel id="panel" runat="server" Visible="false">
            <asp:GridView 
                id="gridView" 
                runat="server"
                AutoGenerateColumns="false"
                EnableViewState="true">
                <Columns>
                    <asp:TemplateField HeaderText="Labels" >
                        <asp:ItemTemplate>
                            <asp:Label
                                id="label"
                                runat="server"
                                text="Label"/>
                            </asp:ItemTemplate>            
                    </asp:TemplateField>            
                </Columns>            
            </asp:GridView>
        </asp:Panel>
        <asp:Button id="button" runat="server" Text="Show panel" OnClick="buttonClicked" />
    </form>
</body>
</html>


Код

using System;
using System.Web;
using System.Web.UI;
using System.Collections;

namespace DataGrid
{
    public partial class Default : System.Web.UI.Page
    {
        public virtual void buttonClicked (object sender, EventArgs args)
        {
            ArrayList arrayList = new ArrayList {
                "label",
                "label",
                "label",
                "label",
                "label"
            };            
            gridView.DataSource = arrayList;            
            //gridView.DataBind ();
            
            gridView.Columns[0].HeaderText = "Header";
            //gridView.DataBind ();
            
            panel.Visible = true;
        }
    }
}


Поочередно раскомментировав gridView.DataBind (); в разных местах - можно наблюдать различное поведение, в том числе и поднятое в вопросе (текст отображается "со второго раза").

Автор: Gluttton 4.6.2011, 22:52
Пожалуй, вот так пример будет выглядеть более удачно:
Код

using System;
using System.Web;
using System.Web.UI;
using System.Collections;

namespace DataGrid
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load (object sender, EventArgs e)
        {
            ArrayList arrayList = new ArrayList {
                "label",
                "label",
                "label",
                "label",
                "label"
            };

            gridView.DataSource = arrayList;

            gridView.DataBind ();
        }

        public virtual void buttonClicked (object sender, EventArgs args)
        {
            gridView.Columns[0].HeaderText = "Header";
            
            //gridView.DataBind ();

            panel.Visible = true;
        }
    }
}


Комментированием и разкомментированием girdView.DataBind() в buttonClicked можно достигать изменений с первого или со второго раза.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)