2017-04-18 10 views
0

私のページの2つでこの動作が見られますが、私は現時点で私にとって重要なものについて質問するつもりです。私はデータベースからASPグリッドビューに情報をロードするページを持っていて、ユーザーは各入力行に詳細を追加することができます。最初にクリックすると、ASP.NETコントロールはクリックイベントで起動しません

グリッドビューの「編集」ボタンをクリックしてから「更新」または「キャンセル」ボタンをクリックすると、実際にonclickイベントを発生させるには2回のクリックが必要になります。ポストバックは最初のクリックで行われますが、実際には何も起こりません。

以下に関連すると思われるコードが含まれています。ページにはマスターページが使用されており、書式設定に関係するdivがいくつかありますが、除外しています。

GridViewのと関連するコントロール:以下

<asp:UpdatePanel runat="server" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <asp:Label Text="Plant Selector: " runat="server" /> 
     <asp:DropDownList ID="ddlPlant" OnSelectedIndexChanged="ddlPlant_SelectedIndexChanged" runat="server" /> 
     <asp:Button ID="btnUpdate" Text="Update" OnClick="btnUpdate_Click" runat="server" /> 
     <p /> 
     <asp:Label ID="lblTest" Text="" runat="server" /> 
     <asp:Label ID="lblerror" Text="" ForeColor="Red" runat="server" /> 
     <asp:GridView ID="gridview1" AutoGenerateColumns="false" runat="server" OnRowEditing="gridview1_RowEditing" OnRowCancelingEdit="gridview1_RowCancelingEdit" OnRowUpdating="gridview1_RowUpdating"> 
      <Columns> 
       <asp:BoundField DataField="JobNum" HeaderText="Job Number" ReadOnly="true" /> 
       <asp:BoundField DataField="ModelNum" HeaderText="Model" ReadOnly="true" /> 
       <asp:BoundField DataField="Customer" HeaderText="Customer" ReadOnly="true" /> 
       <asp:BoundField DataField="SchCompDate" HeaderText="Sch Comp Date" ReadOnly="true" /> 
       <asp:TemplateField HeaderText="Details"> 
        <EditItemTemplate> 
         <asp:TextBox ID="Txt" Width="98%" runat="server" /> 
        </EditItemTemplate> 
        <ItemTemplate> 
         <asp:Label Text="Click Edit to add details of exception." runat="server" /> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:CommandField ShowEditButton="true" /> 
      </Columns> 
     </asp:GridView> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="gridview1" /> 
    </Triggers> 
</asp:UpdatePanel> 

サンプル画像:

Sample gridview display

はここ背後にあるコードされています

private string Plant { get; set; } 

// This sets the default plant based off IP. 
protected void Page_PreInit(Object sender, EventArgs e) 
{   
    getPlantFromIP(); 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     populateDDL(); 
     BindData(); 
    } 
    else 
    { 
     Plant = ddlPlant.SelectedValue.ToString(); 
    } 
} 

// Populates the drop down. 
private void populateDDL() 
{   
    ddlPlant.Items.Add("NC"); 
    ddlPlant.Items.Add("WA"); 

    setPlantInDDL(); 
} 

private void setPlantInDDL() 
{ 
    if(Plant == "WA") 
    { 
     ddlPlant.SelectedIndex = 1; 
    } 
    if (Plant == "NC") 
    { 
     ddlPlant.SelectedIndex = 0; 
    } 
} 

private void getPlantFromIP() 
{ 
    if (Request.ServerVariables["REMOTE_ADDR"] == "70.103.118.100") 
    { 
     Plant = "WA"; 
     //ddlPlant.SelectedIndex = 1; 
    } 
    else 
    { 
     Plant = "NC"; 
     //ddlPlant.SelectedIndex = 0; 
    } 
} 

// Database Query. 
private DataTable getDataFromDatabase() 
{ 
    DataTable rTable = new DataTable(); 

    string plant = ddlPlant.SelectedValue.ToString(); 

    using (var conn = new MySqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["workorderConnectionString"].ConnectionString)) 
    { 
     conn.Open(); 
     using (var cmd = conn.CreateCommand()) 
     { 
      try 
      { 
       cmd.CommandText = @"SELECT * FROM reportdatatables.compliance_exception_report 
            WHERE ExceptionNoted = '0' AND Plant = @plant"; 
       cmd.Parameters.AddWithValue("@plant", plant); 

       MySqlDataReader reader = cmd.ExecuteReader(); 

       rTable.Load(reader); 
       reader.Close(); 
       cmd.Dispose(); 
      } 
      catch 
      { 

      } 
      finally 
      { 
       conn.Close(); 
      } 
     } 
    } 

    return rTable; 
} 

// Binds the data from the database to the gridview. 
private void BindData() 
{   
    DataTable data = getDataFromDatabase().Copy(); 

    gridview1.DataSource = data; 
    gridview1.DataBind(); 
} 


protected void ddlPlant_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    //Plant = ddlPlant.SelectedValue.ToString(); 
    BindData(); 
} 

// On edit call. 
protected void gridview1_RowEditing(object sender, GridViewEditEventArgs e) 
{ 

} 

// On cancel call. 
protected void gridview1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) 
{ 
    gridview1.EditIndex = -1; 
} 

protected void gridview1_RowUpdating(object sender, GridViewUpdateEventArgs e) 
{ 

} 

protected void btnUpdate_Click(object sender, EventArgs e) 
{ 
    BindData(); 
} 

は、ここで私が試したものです:

-A多くの投稿は、コントロールのオートポストバック設定に関するこの動作を見ました。ご覧のとおり、autopostbackがtrueに設定されている場合は、何も制御しないようにしています。

- この現象はupdatepanelに関連する可能性がありますが、それを削除しても動作はまったく変更されません。

-Iこれは、あなたのページタグでAutoEventWireup = "true"となっていることが原因で発生する可能性があります。私は自分のページタグにそれを持っていますが、それをfalseに設定しても問題は解決されず、ページの読み込み時にドロップダウンが発生しません。

- コントロールのIDがページの読み込みとポストバックの間で変更される可能性があるという別の投稿がありました。これらのコントロールのIDを監視していて、IDに変更はありません。

だから、誰かが私が逃しているものについての手がかりを持っていることを望んでいる。私が提供できる情報が他にもあれば、私に知らせてください。

ありがとうございます。

+0

がキャンセルされますされ、これを試してみてくださいイベントと参照してください? – Krishna

+0

私が見ているのは、gridview1_RowEditingイベントだけです。 –

+0

編集ボタンをクリックすると、行編集に移行し、グリッドは最初のクリック時に編集モードに変わりませんか? – Krishna

答えて

1

イベントは他のすべてにブレークポイントを置くことができるのPage_Load以外発射しているもの、それは戻って最初のクリックで投稿すると、編集可能なグリッド

protected void gridview1_RowEditing(object sender, GridViewEditEventArgs e) 
{ 
    GridView1.EditIndex = e.NewEditIndex; 
    BindData(); 
} 

を作るためにも

protected void gridview1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) 
{ 
    gridview1.EditIndex = -1; 
    BindData(); 
} 
+0

これで問題は解決します。しかし、なぜそれが起こっていたのかまだ分かりません。 ありがとうございます。 –

+0

編集をクリックしたときに編集モードでグリッドを設定していないため、グリッドが機能しないという問題があります。しかし、2度目のクリックでは、どのようにモードを編集するのでしょうか。私は知らない:) – Krishna

+0

ええ、それは私が混乱している部分です。あなたはそれがまったく動かないと思います。 –

関連する問題