2016-10-18 4 views
0

データベーステーブルに新しい行を挿入できるGridViewがあります。 「承認者」のドロップダウンに同じデータベーステーブルの値を入力する必要がありますが、このテーブルでは、approved_by列は一意のID番号として格納されます。 'GetWeldID'という名前のストアドプロシージャは、その番号をウェブサイト上に提示する必要がある名前に変換します。EmptyDataRowとFooterデータのDropdownListがSQLストアドプロシージャとバインドします

これは私のコードです: aspxページ:ページaspx.cs

<asp:TemplateField HeaderText="Approved By"> 
        <ItemTemplate> 
         <asp:Label ID="lbl_Approved" runat="server" Text='<%#Eval("approved_by") %>'></asp:Label> 
        </ItemTemplate> 

        <FooterTemplate> 
        <asp:DropDownList ID="tb_approved_by" runat="server"> 
        </asp:DropDownList> 
       </FooterTemplate> 
       </asp:TemplateField> 
    <EmptyDataTemplate> 
          <tr> 
           <th></th> 
           <th>Serial Number</th> 
           <th>Approved By</th> 
          </tr> 
          <tr> 
           <td> 
            <asp:Button runat="server" ID="btInsert" Text="Insert New In Scope Record" OnClick="Add" CommandName="EmptyDataTemplate" Class="Button" /> 
            <br /> 
            <asp:Button runat="server" ID="btInsertOut" Text="Insert New Out of Scope Record" OnClick="AddOut" CommandName="EmptyDataTemplate" Class="Button" /> 
           </td> 
           <td> 
            <asp:TextBox runat="server" ID="tb_Serial_Number" CssClass="text"></asp:TextBox> 
           </td> 
           <td><asp:DropDownList ID="tb_approved_by" runat="server">      
        </asp:DropDownList> </td> 
          </tr> 
         </EmptyDataTemplate> 

:データバインド:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.EmptyDataRow)//for empty template 
     { 
      DropDownList ddlnewuser = (DropDownList)e.Row.FindControl("tb_approved_by"); 
      SqlConnection con = new SqlConnection(cs); 
      con.Open(); 
      SqlDataAdapter da = new SqlDataAdapter("SELECT distinct [dbo].[getWeldName](approved_by) from " + databaseName + "", con); 
      DataTable ds = new DataTable(); 
      da.Fill(ds); 
      ddlnewuser.DataSource = ds; 
      ddlnewuser.DataTextField = "approved_by"; 
      ddlnewuser.DataValueField = "approved_by"; 
      ddlnewuser.DataBind(); 
     } 
     if (e.Row.RowType == DataControlRowType.Footer)//for footer template 
     { 
      DropDownList tb_approved_by = (DropDownList)e.Row.FindControl("tb_approved_by"); 
      SqlConnection con = new SqlConnection(cs); 
      con.Open(); 
      SqlDataAdapter da = new SqlDataAdapter("SELECT distinct [dbo].[getWeldName](approved_by) from " + databaseName + "", con); 
      DataTable ds = new DataTable(); 
      da.Fill(ds); 
      tb_approved_by.DataSource = ds; 
      tb_approved_by.DataTextField = "approved_by"; 
      tb_approved_by.DataValueField = "approved_by"; 
      tb_approved_by.DataBind(); 
     } 
    } 

私は取得していますエラーが

追加情報です'System.Data.DataRowView'には 'approved_by'という名前のプロパティは含まれていません。

これを実行したら、ドロップダウンリストの選択項目を自分のデータベースに追加する必要がありますが、名前を数値ID番号に戻してください。

私が間違っていることは本当に分かりません。だから、私はASP.NET、C#、SQL Serverの初心者なので、どんな助けでも本当に感謝しています。

ありがとうございます!

+0

のような列にエイリアスを入れてみてください。 ' –

+0

' [dbo]から[SELECT distinct [dbo]。[getWeldName](approved_by) getWeldName](approved_by) 'はユーザーが定義した関数です。その場合、名前のない列があります。 SELECT distinct [dbo]。[getWeldName](approved_by)AS 'approved_by'' –

+0

のように、その列にエイリアスを入れてください。また、両方のコードが同じで、コードの重複を避けるために、 'OR'文または' switch/case' –

答えて

1

[dbo] .getWeldNameは、私が想定しているユーザー定義関数です。その場合、名前のない列があります。 SELECT distinct [dbo] .getWeldName AS 'approved_by'

関連する問題