#c# #sql #function #label #userid
#c# #sql #функция #метка #идентификатор пользователя
Вопрос:
Я пытаюсь создать функцию GetUserID(), которая возвращает идентификатор пользователя, который я вставил в метку, чтобы я мог использовать его в других формах.
Но когда я пытаюсь преобразовать метку в int32, метка всегда кажется пустой. Я думаю, это из-за того, где функция размещена в моем коде.
Смотрите:
private void Loginbtn_Click(object sender, EventArgs e)
{
var LoginFunction = new LoginFunction();
var DataTable = new DataTable();
DataTable = LoginFunction.Login(Usernametxt.Text.Trim(), Passwordtxt.Text.Trim());
int UserID = Convert.ToInt32(DataTable.Rows[0]["USER_ID"]);
if (DataTable.Rows.Count == 1)
{
CalculatorMain calculatorMain = new CalculatorMain();
MainMenu mainMenu = new MainMenu();
UserIDlbl.Text = Convert.ToString(UserID);
MessageBox.Show("ID = " UserID);
this.Hide();
mainMenu.Show();
}
else
{
MessageBox.Show("You entered the wrong username or password");
}
}
public int GetUserID()
{
int UserID;
if (Int32.TryParse(UserIDlbl.Text, out UserID))
{
UserID = Convert.ToInt32(UserIDlbl.Text);
}
else
{
MessageBox.Show("Error, Label for UserID could not be parsed");
}
return UserID;
}
Я не уверен, куда еще я могу поместить эту функцию, чтобы заставить ее работать.
Вот код для вызова функции, которая используется в отдельной форме.
private void WorkoutHistoryForm_Load(object sender, EventArgs e)
{
Login login = new Login();
int UserId = login.GetUserID();
this.sETSTableAdapter.Fill(this.gymDataSet.SETS, UserId);
}
Я продолжаю думать, что должен быть лучший способ сделать это вместо сохранения userId в метке, но я не уверен, как.
Ответ №1:
Я бы создал общедоступный класс с общедоступным полем для хранения идентификатора пользователя.
Например. допустим, у вас есть идентификатор пользователя в переменной int, как вы описали. Теперь предположим, что вы создали общедоступный статический класс с именем, Common
определяемым с помощью общедоступного статического поля типа int с именем ID
.
Теперь вы можете сохранить идентификатор пользователя в статическом поле класса:
Common.ID = UserID
Позже, когда вы захотите получить доступ к идентификатору пользователя из какой-либо другой формы, просто сделайте это:
string UserID = Common.ID
Проще простого.
Конечно, вам не нужно делать это в отдельном классе … ваша форма сама по себе является классом, и вы можете создать там свое общедоступное поле и вызвать его следующим образом
Form1.UserID
Или как бы там ни называлась ваша исходная форма, в которой вы записали идентификатор пользователя…
Комментарии:
1. Как бы мне получить идентификатор пользователя? в настоящее время я получаю его из таблицы данных после вызова функции с именем пользователя и паролем в качестве аргументов, но я не хочу выполнять этот код дважды. И я не уверен, как вернуть два типа данных в функции
2. Это предполагало, что вы предварительно извлекли идентификатор пользователя, как вы уже делаете. Я предлагаю сохранить его в свойстве класса (поле), вместо того, чтобы хранить его в метке на форме. Я не уверен, что понимаю, зачем вам нужно возвращать два значения из функции. Но если вы сочтете это необходимым, есть 2 хороших варианта: 1. Используйте класс для хранения обоих свойств и доступа к ним там, когда они вам понадобятся. 2. Вы можете использовать аргументы Out в качестве параметров функции, если хотите получить более одного возвращаемого значения. Я предпочитаю #1.