c# - 如何在C#中传递参数rowIndex
问题描述
我也是 C# 和 MySQL 的新手。
在我之前关于如何显示包含 SQL 数据的消息框的问题的答案中,他提到了:
调用 Execute 方法时传入参数 rowIndex 和 stringToSearch。
我仍然不明白它是如何工作的。
下面是我的 ViewModel
public class VModel
{
public ICommand Clicked { get; set; }
public DataView Library { get; private set; }
public VModel()
{
DataTable dt = new DataTable();
using (MySqlConnection connection = new MySqlConnection("SERVER=localhost;" + "DATABASE=library;" + "UID=root;" + "PASSWORD=;"))
{
MySqlDataAdapter adapter = new MySqlDataAdapter();
adapter.SelectCommand = new MySqlCommand("Select * from movie_list where id_movie = @id_movie", connection);
adapter.Fill(dt);
}
var Library = dt.DefaultView;
var Clicked = new ClickedCommand(this);
}
}
点击
internal class ClickedCommand : ICommand
{
private VModel _vModel;
public ClickedCommand(VModel vModel)
{
_vModel = vModel;
}
public event EventHandler CanExecuteChanged { add { } remove { } }
public bool CanExecute(object parameter)
{
return true;
}
public void Execute(object parameter)
{
var rowIndex = (string)parameter[0];
var stringToSearch = (string)parameter[1];
MessageBox.Show(_vModel.Library.[rowIndex][stringToSearch]);
}
}
Xaml
<ScrollViewer>
<ItemsControl Background="#191919" ItemsSource="{Binding Path=Library}" Margin="130,0,2,0" BorderThickness="0">
<ItemsControl.ItemTemplate>
<DataTemplate DataType="viewModels:Card">
<Button Margin="0,2,0,0" Command="{Binding Path=DataContext.Clicked, RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}">
<StackPanel Margin="0,0,0,0">
<Grid Margin="5,5,5,5">
<Rectangle RadiusX="5" RadiusY="5" Width="150" Height="230">
<Rectangle.Fill>
<ImageBrush x:Name="myImage" ImageSource="{Binding Path=cover}"/>
</Rectangle.Fill>
</Rectangle>
<Label Background="#CC000000" Margin="107,10,0,193" Content="{Binding Path=year}" HorizontalContentAlignment="right" Foreground="White"/>
<Label Width="150" Background="#CC000000" Margin="0,203,0,0" Content="{Binding Path=title}" HorizontalContentAlignment="Center" Foreground="White"/>
</Grid>
<Label Visibility="Visible" Name="lbl" HorizontalContentAlignment="Center" Tag="labl"/>
</StackPanel>
</Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</ScrollViewer>
打开var rowIndex = (string)parameter[0];
,var stringToSearch = (string)parameter[1];
它显示了这一点:
无法将 [] 索引应用于“对象”类型的表达式
当我改变我的时候[rowIndex]
,[0]
它说:
无法从“对象”转换为“字符串”
解决方案
我认为您需要在 DataView 中加载所有电影:
public class VModel
{
public ICommand Clicked { get; set; }
public DataView Library { get; private set; }
public VModel()
{
DataTable dt = new DataTable();
using (MySqlConnection connection = new MySqlConnection("SERVER=localhost;" + "DATABASE=library;" + "UID=root;" + "PASSWORD=;"))
{
MySqlDataAdapter adapter = new MySqlDataAdapter();
adapter.SelectCommand = new MySqlCommand("select * from movie_list", connection);
adapter.Fill(dt);
}
var Library = dt.DefaultView;
var Clicked = new ClickedCommand(this);
}
}
当你点击时,你会显示标题:
internal class ClickedCommand : ICommand
{
private VModel _vModel;
public ClickedCommand(VModel vModel)
{
_vModel = vModel;
}
public event EventHandler CanExecuteChanged { add { } remove { } }
public bool CanExecute(object parameter)
{
return true;
}
public void Execute(object parameter)
{
var id_movie = (int)parameter;
var rowIndex = id_movie - 1;
MessageBox.Show(_vModel.Library[rowIndex]["title"].ToString());
}
}
您可以用"title"
表movie_list 的其他列名替换。
此解决方案不使用 Sql 参数。不确定好不好。
推荐阅读
- ios - iOS 骨架加载动画
- python - 当 numpy 数组具有不同类型时,numpy tobytes 结果的格式是什么?
- sql - 散列对 SQL 中的相同输入给出不同的结果
- reactjs - 如何使用 React 从 url 获取参数?
- amazon-web-services - 使用 PuTTY 连接到 AWS 总是超时。有什么理由吗?
- c++ - WinAPI GUI 看起来很奇怪。应使用默认的 Windows 样式
- c# - 嵌套 for 循环问题 - 需要帮助
- apache-zookeeper - 通过zookeeper连接时如何确定选择了哪个Apache Drill钻头?
- mongodb - 社交媒体网站如何为他们的帖子组合数据
- sed - 如何在 toml 配置文件中使用 SED 正则表达式?