Есть ли способ заставить TextBox управлять полем вашего класса вместо переменной внутри вашего метода генератора
public class MyWindow : Window
{
private TextBox txtNumber;
public void Window_Loaded()
{
GenerateControls();
}
public void GenerateControls()
{
Button btnClickMe = new Button();
btnClickMe.Content = "Click Me";
btnClickMe.Name = "btnClickMe";
btnClickMe.Click += new RoutedEventHandler(this.CallMeClick);
someStackPanel.Childern.Add(btnClickMe);
txtNumber = new TextBox();
txtNumber.Name = "txtNumber";
txtNumber.Text = "1776";
someStackPanel.Childern.Add(txtNumber);
}
protected void ClickMeClick(object sender, RoutedEventArgs e)
{
// Find the phone number
string message = string.Format("The number is {0}", txtNumber.Text);
MessageBox.Show(message);
}
}
Существует способ реализовать это в SQL без триггеров. Это немного сложно, но вы можете это сделать.
Он начинается с добавления другой таблицы. Позвольте мне называть это RoleNumbers. Эта таблица будет состоять из одной строки для каждой возможной роли для пользователя. Таким образом, вы устанавливаете его с помощью 1, 2 или сколько угодно.
Затем для таблицы переходов:
create table UserRoles (
UserRoleId int not null auto_increment primary key,
UserId int not null references users(user_id),
RoleId int not null references roles(role_id),
RoleNumber int not null references RoleNumbers(Number),
unique (UserId, RoleId),
unique (UserId, RoleNumber)
);
В этом используются мои соглашения об именах. У меня нет проблем с синтетическим ключом в таблице соединений.
Когда вы вставляете новую запись, вам нужно будет присвоить значение RoleNumber, которое еще не используется. Следовательно, вы получаете предел. Самый эффективный способ сделать это через триггеры, но это не является абсолютно необходимым. Вы можете сделать вставку:
insert into UserRoles(UserId, RoleId, RoleNumber)
select $UserId, $RoleId, coalesce(max(RoleNumber), 0) + 1
from UserRoles
where UserId = $UserId;
delete потребует отдельный запрос для поддержания схемы нумерации.