2011-10-26 16 views
0

私のデータベースからuserIDを取得しようとしていますが、DetailsViewに値を入れてラベルに設定しています。C#DetailsView値を取得する

文字列が空であるというエラーが発生しました。

public void SendButton_Click(object sender, EventArgs e) 
{ 
    labelID.Text = DetailsView1.Rows[0].Cells[1].Text; 
    strVariable = labelID.Text; 

    System.Diagnostics.Debug.Write("variabelen: " + strVariable); 
    System.Guid g = new Guid(strVariable); 
    SqlDataSource1.InsertParameters[3].DefaultValue = g.ToString(); 
    SqlDataSource1.Insert(); 
} 


<asp:Label ID="labelID" Name="LabelID" runat="server"></asp:Label> 

<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" 
    DataSourceID="SqlDataSource2" Height="50px" Width="125px" 
    DefaultMode="Edit"> 
    <Fields> 
     <asp:BoundField DataField="UserId" HeaderText="UserId" 
      SortExpression="UserId" /> 
    </Fields> 
</asp:DetailsView> 
<asp:SqlDataSource ID="SqlDataSource2" runat="server" 
    ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
    SelectCommand="SELECT UserId FROM aspnet_Users WHERE (UserName = 'bo')"> 

</asp:SqlDataSource> 

labelID.Textは、クリックボタンイベントにとDetailview(グリッド)のローディングは、ユーザーがログインしているときです。ユーザID取得のロードされたdetailsview1では、ユーザーがログインしているときということであること。

どうすればこの問題を解決できますか?

+1

ログインしたユーザーのIDを取得しようとしていますか?もしそうなら、 'User.Identity.Name'を試してください。 – jrummell

答えて

3

文脈がなくても問題が何であるか正確に言うのは難しいですが、DetailsView1.Rows[0].Cells[1].TextはDetailsView内でユーザーIDを検索する適切な場所ではないと思います。 Visual Studioでその行にブレークポイントを設定し、適切な場所を見つけるために直接ウィンドウの行とセルをステップ実行することができます。

詳細ビューのデータソースとして使用するコードと、役立つ可能性があるDetailsViewの定義を提供できる場合は、新しいサンプルコードに基づいて

編集:私はあなたのサンプルコードを実行すると、(DetailsView1.Rows[0].Cells[1].Controls[0] as TextBox).Textは私に、ユーザIDの値を与える

。 DetailsViewはバインドされたフィールドをTextBoxとしてレンダリングするので、Cells[1]Controlsコレクションに入る必要があります。

+1

+1、それはそれだと思う。 – jadarnel27

関連する問題