我已将 public void setImage(final Context c,final String imageUrl){
try {
if (imageUrl!=null) {
//
Picasso.with(c).load(imageUrl).error(R.mipmap.add_btn).fit().centerInside().placeholder(R.mipmap.add_btn)
.networkPolicy(NetworkPolicy.OFFLINE).into(imagePost, new Callback() {
@Override
public void onSuccess() {
}
@Override
public void onError() {
//Reloading an image again ...
Picasso.with(c).load(imageUrl).error(R.mipmap.add_btn).placeholder(R.mipmap.add_btn)
.into(imagePost);
}
});
} else {
imagePost.setVisibility(View.GONE);
}
}
catch (Exception e){
}
}
public void setVideo(final Context c, final String videoUrl){
try {
if (videoUrl!=null) {
try {
Uri videoUri = Uri.parse(videoUrl);
try {
videoLayout.setVideoURI(videoUri);
videoLayout.setTag(videoUrl);
String hasVideo_string = (String) videoLayout.getTag();
boolean hasVideo = Boolean.parseBoolean(hasVideo_string);
} catch (IOException e) {
e.printStackTrace();
}
} catch (Exception e) {
System.out.println("Error :" + e);
}
} else {
videoLayout.setVisibility(View.GONE);
}
}
catch (Exception e){
}
}
设置为在combobox
的{{1}}中显示。现在,我正在尝试从column1
事件中填充出现Combobox的同一行Datagridview
。这是我显示组合框的代码:
Datagridview
我尝试了很多东西,但我不知道如何确定Combobox出现在哪一行以及如何将Combobox_Key_Down
行赋予Private Sub My_DGV_CellMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles MY_DGV.CellMouseClick
If e.RowIndex >= 0 Then
With My_DGV
If .Columns(.Rows(e.RowIndex).Cells(e.ColumnIndex).ColumnIndex).Name = "Column1" Then
.CurrentCell = .Rows(.CurrentRow.Index).Cells(.CurrentCell.ColumnIndex)
Show_Combobox(.CurrentRow.Index, .CurrentCell.ColumnIndex) 'function that shows my Combobox in that cells
Combo.Visible = True
Else
Combo.Visible = False
End If
End With
End If
End Sub
值。有人请告诉我应该怎么做的线索。提前谢谢!
答案 0 :(得分:2)
您的方法的第一个问题是DGV只能有一个DataSource
:它可以显示m:m关联表或相关元素。如果将其中一个表中的列包含在查询中以供显示,则该表将变为不可更新,并且用户可能会混淆为什么他们无法编辑他们可以看到的内容。它们描述它似乎没什么价值,因为在之后选择它们之前,它们无法看到详细数据。
接下来,它需要另一个数据表来提供CboColB的详细信息。由于您希望DGV绑定到DataTable
轻松更新,您最终不得不一遍又一遍地将数据戳入单元格。
最后,考虑用户面临的问题。使用Country表(200个国家/地区的ISO代码和名称)和标志颜色列表,CountryFlagColors的表将有数百行(每个标志只有2种颜色)。
更好的显示可能是将m:m
表(flagcolor
)过滤为所选项目,以便用户只面对他们当前感兴趣的数据子集:
DGV中使用的数据表是从m:m表构建的:
RowValidating
事件中,当国家/地区单元格为DBNull 时,将SelectedValue
从国家/地区组合复制到DGV单元格以填充空白
da.Update(dtFlagColors)
应用/保存所有更改。好的,这样就提供了核心功能来分配N种颜色选择来定义一个国家的旗帜颜色。缺少的元素是Color项的“细节”。
我在Color表中添加了一个没有意义的int和字符串项,显示这些的一种方法是在SQL中创建一个带有重要细节的别名。将它们显示为离散元素可以使查询不可更新,也可以邀请用户编辑这里无法编辑的内容。我愚蠢的SQL:
"SELECT Id, Name, Concat(Name , ' (' , intItem , ' ' , stritem,')') As Info from FColor"
然后使用'Info'作为dgv:
中CBO列的显示成员dc = DirectCast(dgvCF.Columns(0), DataGridViewComboBoxColumn)
dc.DataSource = dtFlagColors
dc.DisplayMember = "info"
dc.ValueMember = "id"
dgvCF.DataSource = dtSample
组合列当然有自己的数据源,以便显示一件事并使用另一件作为值来回馈给您。结果(值很傻):
这不完全是你想要的,但接近并且更简单。它几乎不需要用于驱动关联实体的代码。另一种方法是使用DGV作为第二个选择器,这样您就可以显示扩展数据并手动向DGV添加行:
如果将下拉样式设置为Nothing,则它看起来像文本列。