Próbuję zdobyć userID
z mojej bazy danych umieść go w DetailsView
i uzyskaj wartość i ustaw etykietę.
Pojawia się błąd, że ciąg jest pusty.
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>
Zauważ, że labelID.Text
jest w zdarzeniu przycisku kliknięcia i że Detailview
Ładowanie (grid) następuje, gdy użytkownik jest zalogowany. Identyfikator użytkownika zostanie załadowany detailsview1
gdy użytkownik jest zalogowany.
Jak mogę to naprawić?
Odpowiedzi:
3 dla odpowiedzi № 1Trudno powiedzieć dokładnie, na czym polega problem bez większego kontekstu, ale zakładam, że tak DetailsView1.Rows[0].Cells[1].Text
nie jest poprawną lokalizacją w DetailsViewszukać identyfikatora użytkownika. Możesz spróbować ustawić punkt przerwania dla tej linii w Visual Studio i przechodzić przez wiersze i komórki w bezpośrednim oknie, aby znaleźć odpowiednią lokalizację.
Jeśli możesz podać kod używany jako źródło danych dla DetailsView, a także definicję DetailsView, która byłaby pomocna.
EDYCJA W OPARCIU O NOWY KOD PRZYKŁADOWY:
Kiedy uruchomię twój przykładowy kod, ( DetailsView1.Rows[0].Cells[1].Controls[0] as TextBox ).Text
daje mi wartość identyfikatora użytkownika. Musisz wejść do Controls
kolekcja na Cells[1]
ponieważ DetailsView renderuje powiązane pola jako TextBoxes.