GridView и updatepanel - не меняйте вид - PullRequest
0 голосов
/ 26 мая 2011

Мне нужна помощь с updatepanel.У меня есть сетка, подобная этой:

  <asp:UpdatePanel ID="UpdatePanel1" runat="server" EnableViewState="false" UpdateMode="Conditional">
         <Triggers>
            <asp:AsyncPostBackTrigger ControlID="DropDownList2" EventName="SelectedIndexChanged" />
        </Triggers>
        <ContentTemplate>
            <asp:TextBox ID="TextBox2" runat="server" TextMode="MultiLine" Width="294px"></asp:TextBox>
            <br />
            <br />
            <asp:GridView ID="GridView1" runat="server" AllowSorting="True" 
                BackColor="#FFFFCC" Width="100%" AutoGenerateSelectButton="True" 
                BorderWidth="1px" EnableSortingAndPagingCallbacks="True" 
                onselectedindexchanging="GridView1_SelectedIndexChanging" 
                onselectedindexchanged="GridView1_SelectedIndexChanged">
                <Columns>
                    <asp:BoundField DataField="nazwa_dysku" HeaderText="Nazwa Dysku" 
                        SortExpression="nazwa_dysku" />
                        <asp:BoundField DataField="folder" HeaderText="Folder" 
                        SortExpression="folder" />
                        <asp:BoundField DataField="nazwa_pliku" HeaderText="Nazwa Pliku" 
                        SortExpression="nazwa_pliku" />
                        <asp:BoundField DataField="czas_trwania" HeaderText="Czas trwania" 
                        SortExpression="czas_trwania" />
                        <asp:BoundField DataField="rozmiar" HeaderText="Rozmiar" 
                        SortExpression="rozmiar" />
                        <asp:BoundField DataField="data_utworzenia" HeaderText="Data utworzenia" 
                        SortExpression="data_utworzenia" />
                        <asp:BoundField DataField="data_modyfikacji" HeaderText="Data modyfikacji" 
                        SortExpression="data_modyfikacji" />
                        <asp:BoundField DataField="sciezka" HeaderText="Lokalizacja" 
                        SortExpression="sciezka" />
                </Columns>
                <HeaderStyle BackColor="#9A6E71" Font-Size="Medium" />
                <SelectedRowStyle BackColor="Red" />
            </asp:GridView>
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="GridView1" EventName="SelectedIndexChanged" />
            <asp:AsyncPostBackTrigger ControlID="GridView1" EventName="SelectedIndexChanging" />
        </Triggers>
    </asp:UpdatePanel>

Поэтому, когда я нажимаю кнопку выбора, ему нужно изменить выбор и обновить панель обновления.Итак:

 public bool dane(int numerdysku)
    {

        string connectionString = "data source=localhost ;initial catalog=archiwizacjatvs;user id=root;password=wsti";
        MySqlConnection conn = new MySqlConnection(connectionString);
        try
        {
            conn.Open();
            MySqlDataAdapter dadapter = new MySqlDataAdapter("select nazwa_dysku,folder,nazwa_pliku,czas_trwania,rozmiar,data_utworzenia,data_modyfikacji,sciezka from archiwum where nazwa_dysku='" + DropDownList2.SelectedValue.ToString() + "'", conn);
            DataTable tablica = new DataTable();
            dadapter.Fill(tablica);
            DataTableReader datatablereader = tablica.CreateDataReader();
            //DataRow row;
            if (tablica.Rows.Count > 0)
            {
                /*for (int i = 0; i <= tablica.Rows.Count-1; i++)
                    {
                    row = tablica.Rows[i];
                    TextBox2.Text = row[1].ToString() + " : " + row[2].ToString() + " : " + row[3].ToString() + " : " + row[4].ToString() + " : " + row[5].ToString();
                    }*/
                GridView1.DataSource = tablica;
                GridView1.DataBind();
                conn.Close();

            }
            else
            {
                TextBox2.Text = "Tablica jest pusta!";
            }
            conn.Close();

        }
        catch (Exception ex)
        {
            TextBox2.Text = ex.ToString();
        }
        return true;
    }

protected void Page_Load(object sender, EventArgs e)
{
    string connectionString = "data source=localhost ;initial catalog=archiwizacjatvs;user id=user;password=password";
              MySqlConnection conn = new MySqlConnection(connectionString);
              try
              {
                  conn.Open();
                  MySqlDataAdapter dadapter = new MySqlDataAdapter("select * from archiwum order by nazwa_dysku DESC", conn);
                  DataTable tablica = new DataTable();
                  dadapter.Fill(tablica);
                  DataTableReader datatablereader = tablica.CreateDataReader();
                  DataRow row = tablica.Rows[0];
                  for (int i = 1; i <= Convert.ToInt64(row[1]); i++)
                    {
                    DropDownList2.Items.Add(i.ToString());
                    }
                  conn.Close();
              }
              catch (Exception ex)
                {
                    TextBox2.Text = ex.ToString();
                }
}

protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
    {
        dane(DropDownList2.SelectedIndex);
    }

protected void GridView1_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
    {
        GridView1.SelectedIndex =  e.NewSelectedIndex;
        TextBox2.Text = GridView1.SelectedIndex.ToString();
    }

   protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
    {
        dane(DropDownList2.SelectedIndex);
    }

Он работает с первым выбором или никогда ... Если я нажму несколько раз F5, он снова работает.Что я должен изменить?

1 Ответ

0 голосов
/ 26 мая 2011

Зачем вы устанавливаете EnableViewState="false"? Когда вы нажимаете кнопку, ваши данные Gridview не отображаются, потому что на page PostBack ваш viewState не поддерживается, так как вы установили его в false. Но когда вы нажмете F5, вся страница обновится, и она получит данные.

Просто удалите EnableViewState="false" из панели обновления, и она будет работать.

Во-вторых, поместите следующее условие в page_load под !IsPostBack:

protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
string connectionString = "data source=localhost ;initial catalog=archiwizacjatvs;user id=user;password=password";
          MySqlConnection conn = new MySqlConnection(connectionString);
          try
          {
              conn.Open();
              MySqlDataAdapter dadapter = new MySqlDataAdapter("select * from archiwum order by nazwa_dysku DESC", conn);
              DataTable tablica = new DataTable();
              dadapter.Fill(tablica);
              DataTableReader datatablereader = tablica.CreateDataReader();
              DataRow row = tablica.Rows[0];
              for (int i = 1; i <= Convert.ToInt64(row[1]); i++)
                {
                DropDownList2.Items.Add(i.ToString());
                }
              conn.Close();
          }
          catch (Exception ex)
            {
                TextBox2.Text = ex.ToString();
            }

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...